일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- interrupted()
- function test
- @NoArgsConstructor
- SQL
- 구간합구하기
- 합배열
- MariaDB Query Log
- 슈더코드
- pseudo-code
- Bean LifecCycle
- 생성자
- 구간합
- 2차원배열 구간합
- 마리아DB 쿼리 로그
- @AllArgsConstructor
- InterruptException
- 백준
- 백준 11659번
- ajax
- select
- 백준 11660번
- 자바 람다식
- jquery
- 백준 1235번
- json
- Java
- this와 this() 차이
- this
- 상속과 참조
- map()
- Today
- Total
평범한 연구소
[Spring] 스프링 컨테이너, Bean 본문
Spring Ioc Container
- 스프링 애플리케이션에서는 오브젝트의 생성과 관계 설정, 사용, 제거 등의 작업을 애플리케이션 코드 대신 독립된 컨테이너가 담당한다. 컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고 있어서 IoC라고 부르며, 스프링 컨테이너를 IoC 컨테이너라고도 한다.
- 애플리케이션 컨텍스트 : DI를 위한 빈 팩토리에 엔터프라이즈 애플리케이션을 개발하는 데 필요한 여러 가지 컨테이너 기능을 추가한 것
- Bean Factory, ApplicationContext 두 개의 인터페이스로 정의되어있다. ApplicationContext 인터페이스는 BeanFactory 인터페이스를 상속한 하위 인터페이스.
- 스프링 컨테이너 또는 IoC 컨테이너는 바로 ApplicationContext 인터페이스를 구현한 클래스의 오브젝트.
- 스프링 애플리케이션은 최소한 하나 이상의 애플리케이션 컨텍스트 오브젝트(IoC 컨테이너)를 갖고 있다.
인터페이스 | 설명 |
BeanFactory | Spring Bean 컨테이너에 엑세스하기 위한 루트 인터페이스 |
ApplicationContext | 애플리케이션에 설정 정보를 제공하기 위한 Spring 애플리케이션의 주요 인터페이스 |
Container 종류
- 스프링에서는 BeanFactory와 이를 상속한 ApplicationContext 두 가지 유형의 컨테이너 제공.
- BeanFactory
- 설정 파일의 <bean> 태그에 설정된 클래스의 객체를 생성하고 관리하는 가장 기본적인 컨테이너 기능만 제공.
- 컨테이너가 구동될 때 <bean> 태그에 설정된 클래스 객체 생성 X. 클라이언트의 요청에 의해서만 <bean> 태그에 설정된 클래스의 객체가 생성되는 지연로딩(Lazy Loading) 방식 사용.
- ApplicationContext
- BeanFactory가 제공하는 빈 관리 기능 이외에도 파일고 같은 자원 처리 추상화, 메시지 지원 및 국제화 지원, 이벤트 지원 등 추가적인 기능 제공.
- 컨테이너가 구동되는 시점에 <bean>에 등록된 클래스의 객체를 생성하는 즉시로딩(pre-loading) 방식 사용.
Spring Bean
- Bean은 Spring Bean Container에 존재하는 객체.
- Bean Container는 의존성 주입을 통해 Bean 객체를 사용할 수 있도록 해준다.
Bean 설정 방법
① XML 기반 설정 (XML Configuration)
- <bean> 태그를 이용하여 빈 설정.
- Class 파일들과 설정을 분리할 수 있고, 관심사의 분리 관점이 적용된다.
- 간단한 설정 변경은 별도의 컴파일 없이도 적용 가능하다.
- XML의 값들은 모두 String 형이기 때문에 안전하지 않다.(type safe X)
- 생성자를 이용한 의존성 주입, setter 메소드를 이용한 의존성 주입
② Annotation 기반 설정
- @Component, @Service 등을 사용하여 설정.
- Java code로 설정하므로 type safe하고, Spring이 빠르게 container를 설정하게 한다.
- Annotaion이 클래스(또는 메소드) 상단에 추가되면서 설정이 구성. 클래스 파일만 보아도 어떤 스프링 설정이 적용된 클래스인지 한눈에 알 수 있다.
③ 자바 기반 설정
- @Configuration과 @Bean을 사용하여 설정.
- Java code로 설정하므로 type safe하고, Spring이 빠르게 container를 설정하게 한다.
- 설정이 별도의 class file로 분리. 관심사의 분리 적용.
Bean 설정 방법 ① XML 기반 설정
- <bean> 태그를 사용한다. 생성된 객체는 자바 코드에서 getBean()으로 빈을 가져오거나, 주입 설정에서 ref 속성으로 빈을 참조하는 경우 사용된다.
- 스프링 컨테이너는 XML 설정 파일에 등록된 클래스를 찾아서 객체를 생성할 경우, 기본적으로 매개변수가 없는 기본 생성자를 호출하여 생성한다. 매개변수가 존재하는 생성자를 호출하도록 설정하기 위해선 <constructor-arg> 엘리먼트를 이용하여 매개변수에 데이터를 전달한다. <constructor-arg>는 생성자의 매개변수 만큼 설정하면 된다.
<bean id="userService" class="com.user1.UserServiceImpl"/>
<!-- 인자가 여러개인 생성자 -->
<bean id="userService2" class="com.user1.UserServiceImpl2">
<constructor-arg name="tel" value="010-1111-3333"/>
<constructor-arg name="name" value="너자바"/>
<constructor-arg name="age" value="20"/>
</bean>
<!-- 인자가 하나인 생성자 -->
<bean id="user" class="com.user1.User">
<constructor-arg ref="userService2"/>
</bean>
<!-- c 네임스페이스를 이용하여 생성자에 값 설정 -->
<bean id="userService2" class="com.user2.UserServiceImpl2"
c:name="네임스페이스" c:tel="010-1111-2222" c:age="20" />
<!-- c 네임스페이스를 이용한 의존성 주입 -->
<bean id="user" class="com.user2.User"
c:userService-ref="userService2"
init-method="init"
destroy-method="destroy"
/>
- <constructor-arg>
- ref: 인자로 전달될 데이터가 <bean>으로 등록된 다른 객체인 경우 ref를 사용하여 해당 객체의 아이디나 이름 참조
- c 네임스페이스
- <constructor-arg> 태그 대신 생성자 매개변수 설정
- 인자로 전달될 데이터가 <bean>으로 등록된 다른 객체인 경우
- c:변수명-ref="설정할빈아이디"
- 인자로 전달될 데이터가 고정된 문자열이나 정수같은 기본형 데이터인 경우
- c:변수명="값"
'Spring Framework' 카테고리의 다른 글
[Spring] MVC (0) | 2022.11.13 |
---|---|
[Spring] AOP (관점 지향 프로그래밍) (0) | 2022.11.12 |
[Spring] 어노테이션 (Annotation) (0) | 2022.11.10 |
[Spring] 의존 DI(Dependency Injection) (0) | 2022.11.09 |
[error] Several ports (8005, 9090) required by Tomcat v9.0 Server at localhost are already in use. (0) | 2022.10.04 |