Spring bean
spring
개발자들에게 봄이 왔다
개발자들에게 더욱 수월하게 개발 할 수 있도록 돕는 프레임워크
동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있으며
대한민국 공공기관의 웹 서 비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술로서 쓰이고 있음
- 공식 사이트는 https://spring.io/
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
윈도우, 맥, 리눅스에 따른 각각의 버전 별 설치
- https://download.springsource.com/release/STS/3.9.18.RELEASE/dist/e4.21/spring-tool-suite-3.9.18.RELEASE-e4.21.0-win32-x86_64.zip
- https://download.springsource.com/release/STS/3.9.18.RELEASE/dist/e4.21/spring-tool-suite-3.9.18.RELEASE-e4.21.0-macosx-cocoa-x86_64.dmg
- https://download.springsource.com/release/STS/3.9.18.RELEASE/dist/e4.21/spring-tool-suite-3.9.18.RELEASE-e4.21.0-linux-gtk-x86_64.tar.gz
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=홍길동]