java/spring

Spring bean

#풀닢 2023. 2. 22. 15:48
spring 

개발자들에게 이 왔다

 

개발자들에게 더욱 수월하게 개발 할 수 있도록 돕는 프레임워크
동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있으며
대한민국 공공기관의 웹 서 비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술로서 쓰이고 있음
 

Spring | Home

Cloud Your code, any cloud—we’ve got you covered. Connect and scale your services, whatever your platform.

spring.io


  • 스프링 프레임워크에 대한 설명

https://spring.io/projects/spring-framework

 

 

Spring | Home

Cloud Your code, any cloud—we’ve got you covered. Connect and scale your services, whatever your platform.

spring.io


  • 오늘 학원에서 쓸 스프링 툴은 아래 페이지로 진행이 된다.

https://github.com/spring-attic/toolsuite-distribution/wiki/Spring-Tool-Suite-3

  • full distribution on Eclipse 4.21 

윈도우, 맥, 리눅스에 따른 각각의 버전 별 설치

 

Spring Tool Suite 3

the distribution build for the Spring Tool Suite and the Groovy/Grails Tool Suite - spring-attic/toolsuite-distribution

github.com


loC Container-제어의 역전Inversion of Control(여기서 정처기 공부한 게 나오네)

우리가 제어했던 걸 이제는 프레임 워크가 제어를 담당한다.ex. tomcat servlet container 같은 경우 우리가 insertEmpServlet을 우리가 객체에 대한 생성을 한 적이 없다.

 

IoC 컨테이너
스프링에서는 관리하는 객체를 'Bean(빈)'이라고 하고,
해당 빈들을 관리한다는 의미로 컨테이너를 'Bean Factory'라고 한다.

 

IoC 컨테이너의 역할
1. 객체의 생명주기와 의존성을 관리한다.
2. VO(DTO/POJO) 객체의 생성, 초기화, 소멸 등의 처리를 담당한다.
Plain Old Java 순수 자바 객체 어떠한 설계 규약에도 얽메이지 않는 것을 뜻한다.
3. 개발자가 직접 객체를 생성할 수 있지만 해당 권한을 컨테이너에 맡김으로써 소스 코드 구현의 시간을 단축할 수 있다.
Spring DI
IoC 컨테이너와 Bean 객체
🥜빈 (Bean) 스프링이 IoC 방식으로 관리하는 Class이며
스프링이 직접 생성과 제어를 담당하는 객체이다.
🥜빈 팩토리 (BeanFactory) 스프링의 IoC를 담당하는 핵심 컨테이너이며
Bean을 등록, 생성, 조회, 반환하는 기능을 담당한다.

💚주요컨테이너
자바 빈 객체를 등록하고 이를 관리한다.
getbean() 메소드가 정의되어 있다.
애플리케이션 컨텍스트 (Application Context) BeanFactory를 확장한 IoC 컨테이너이며 Bean을 등록하고 관리하는 기능은 BeanFactory와 동일하지만 스프링이 제공하는 각종 부가 서비스를 추가로 제공한다.

💚주요컨테이너
BeanFactory의 확장 개념이다.
Spring의 각종 부가 서비스를 제공한다.
일반적인 IoC 컨테이너를 말한다.
설정 메타정보 (Configuration metadata) ApplicationContext 또는 BeanFactory가 IoC를 적용하기 위해
사용하는 설정 정보이며 설정 메타정보는 IoC컨테이너에 의해 관리되는
Bean 객체를 생성하고 구성할 때 사용 된다.
+💚GenericXml Application Context 
ApplicationContext 를 구현한 클래스이며 일반적인 XML 형태의 문서를 읽어 컨테이너역할을 수행한다.

BeanFactory란
스프링 컨테이너의 최상위 컨테이너이며 ApplicationContext와 함께 스프링 컨테이너라고 한다.
Bean의 생성과 설정, 관리 등의 역할을 맡고 있다.

MemberDTO(POJO)클래스와 spring-context(Configuration) XML 설정 정보를 이용해서 빈을 등록하고 생성하는 예제 ApplicationContext의 하위 구현체인 GenericXmlApplicationContext는 XML 설정 메타 정보를 읽어와서 BeanFactory를 동작 시킨다.
ApplicationContext context 
= new GenericXmlApplicationContext("com/greedy/section01/xmlconfig/spring-context.xml");

bean의 id를 이용해서 bean을 가져오는 방법은 총 세가지가 있다. 각 각 다르다.

 

💚1. bean의 id를 이용해서 bean을 가져오는 방법

id를 이용하는 경우 bean의 타입 유추가 불가능해서 Object로 반환하므로 다운 캐스팅 필요.

MemberDTO member = (MemberDTO)context.getBean("member");

💚2.bean의 클래스 메타 정보를 전달하여 가져오는 방법

MemberDTO member = context.getBean(MemberDTO.class);

💚3. bean의 id와 클래스 메타 정보를 전달하여 가져오는 방법

MemberDTO member = context.getBean("member",MemberDTO.class);
더보기

출력문은 System.out.println(member);

출력결과

MemberDTO [sequence=1, id=user01, pwd=pass01, name=홍길동]
  • 위의 section01 방법은

1.Application 가동 할 수 있는 클래스와

2.MemberDTO 캡슐화 할 객체들 생성하고

3.Bean File xml을 만들어서

<!-- MemberDTO bean 등록 -->
	<bean id="member" class="com.greedy.section01.xmlconfig.MemberDTO">
		<constructor-arg index="0" value="1"/>
		<constructor-arg name="id" value="user01"/>
		<constructor-arg index="2"><value>pass01</value></constructor-arg>
		<constructor-arg name="name"><value>홍길동</value></constructor-arg>
	</bean>

이렇게 DTO를 등록 해준다.

 

 

 


두번째 방법은 
ContextConfiguration 클래스를 만들고
Bean을 등록하기 위해서는 메소드 위해 @어노테이션을 작성한다.
이름을 별도 지정하지 않으면 메소드 이름을
bean의 id로 자동 인식한다.
@Bean("myName") or @Bean(name="myName")의 형식으로 bean의 id를 설정 할 수 있다.
	@Bean(name="member")
	public MemberDTO getMember() {
		return new MemberDTO(1,"user01","pass01","홍길동");
	}
Application에서
AnnotationConfigApplicationContext 라고 하는 어노테이션 설정 정보를 읽어서 컨테이너 설정을 하는
구현체를 이용한다. 인자로 @Configuration 어노테이션이 달린 설정 클래스의 메타 정보를 전달한다.
ApplicationContext context
= new AnnotationConfigApplicationContext(ContextConfiguration.class);
MemberDTO member = context.getBean("member", MemberDTO.class);
	
System.out.println(member);

출력 결과 MemberDTO [sequence=1, id=user01, pwd=pass01, name=홍길동]

 

 

 

SMALL