# 의존관계 자동 설정
: 의존하는 빈 객체의 타입이나 이름을 이용하여 의존객체를 자동으로 설정할 수 잇는 기능으로 4가지 방식을 제공한다.
: autowire 속성을 이용한다.
- byName : 프로퍼티의 이름과 같은 이름을 갖는 빈 객체를 설정한다.
- byType : 프로퍼티의 타입과 같은 타입을 갖는 빈 객체를 설정한다.
- constructor : 생성자 파라미터 타입과 같은 타입을 갖는 빈 객체를 생성자에 전달한다.
- autodetect : Constructor 방식을 먼저 적용하고, 적용할 수 없을 경우 byType방식을 적용하여 빈객체를 설정한다.
# 빈 객체 범위 (scope)
: 기본적으로 컨테이너에 한 개의 빈 객체를 생성한다.
: 빈의 범위를 설정할 수 있는 방법을 제공한다.
: scope 속성을 이용한다.
- singleton : 컨테이너에 한 개의 빈 객체만 생성한다.(default)
- prototype : 빈을 요청할 때마다 빈 객체를 생성한다.
- request : HTTP 요청마다 빈 객체를 생성한다.(WebApplicationContext에서만 적용)
- session : HTTP 세션마다 빈 객체를 생성한다.(WebApplicationContext에서만 적용)
- global-session : 글로벌 HTTP 세션에 대한 빈 객체를 생성한다. 포트릸을 지원하는 컨텍스트에만 적용 가능하다.
# 스프링 컨테이너(Spring Container)
- BeanFactory : 빈 객체를 관리하고 각 빈 객체 간의 의존 관계를 설정해 주는 가장 단순한 컨테이너
* 대표적인 구현 클래스 : XmlBeanFactory
- ApplicationContext : BeanFactory 인터페이스를 상속받은 하위 인터페이스
* 대표적인 구현 클래스 : ClassPathXmlApplicationContext
# 빈 라이프 사이클(Bean Life Cycle)
: 스프링 컨테이너에 저장되는 빈 객체는 최소한 생성, 초기화, 소멸의 라이프 사이클을 갖게 된다.
: 스플링은 빈 객체의 생성, 초기화, 소멸뿐만 아니라 추가적인 단계를 제공하고 있으며 이를 통해 라이프 사이클에 따른 빈 객체의 상태를 정교하게 제어할 수 있다.
* lazy-init="true"
: 이 속성은 빈의 scope가 singleton일 경우에 사용할 수 있다.
: 기본적으로 빈은 ApplicationContext 생성시 singleton 객체들을 로딩하게 되지만 lazy-init을 true로 바꾸면 명시적인 객체를 참조할 때 생성하게 된다.
1. 빈의 인스턴스화(생성자 호출)
2. 필드값 설정
3. setBeanName() 메서드 호출
- BeanNameAware 인터페이스르 구현하고 있을 경우
4. setBeanFactory() 메서드 호출
- BeanFactoryAware 인터페이스를 구현하고 있을 경우
5. BeanPostProcessor의 postProcessBeforeInitializtion() 메서드 호출
- BeanFactory에 BeanPostProcessor 클래스가 관련되어 있을 경우
6. afterPropertiesSet() 메서드 호출
- InitializationBean 인터페이스를 구현하고 있을 경우
7. Custom 초기화 메서드 호출 (init-method)
- Custom 초기화 메서드가 정의되어 있을 경우
8. BeanPostProcessor의 postProcessAfterInitialization() 메서드 호출
- BeanFactory에 BeanPostProcessor 클래스가 관련되어 있을 경우
9. 빈 사용
//// 컨테이너가 종료할 때에는 다음 순서로 메서드가 호출된다.
1. destroy() 메서드 호출
- DisposableBean 인터페이스를 구현하고 있을 경우
2. Custom Destroy 메서드 호출 (destroy-method)
# Annotation(어노테이션)
@Required
- 속성 또는 setter메서드에 사용가능 (멤버 변수, setXxx())
- 필수 속성이 되게 함
@Autowired
- 속성, 생성자, setter메서드에 사용가능 (멤버 변수, setXxx(), ConstructMethod)
- 타입에 의존하는 객체를 삽입해 준다. (ByName, ByType, constructor, autodetect)
@Qualifier
- @Autowired와 같이 사용
- 같은 타입의 빈 객체들이 있을 경우 특정 빈을 사용하도록 함
@Resource
- 필요한 자원을 자동으로 연결시켜줌
- 빈 객체의 타입이나 이름을 이용하여 의존객체를 자동으로 설정할 수 잇는 기능으로 4가지 방식을 제공한다.
: autowire 속성을 이용한다.
- byName : 프로퍼티의 이름과 같은 이름을 갖는 빈 객체를 설정한다.
- byType : 프로퍼티의 타입과 같은 타입을 갖는 빈 객체를 설정한다.
- constructor : 생성자 파라미터 타입과 같은 타입을 갖는 빈 객체를 생성자에 전달한다.
- autodetect : Constructor 방식을 먼저 적용하고, 적용할 수 없을 경우 byType방식을 적용하여 빈객체를 설정한다.

# 빈 객체 범위 (scope)
: 기본적으로 컨테이너에 한 개의 빈 객체를 생성한다.
: 빈의 범위를 설정할 수 있는 방법을 제공한다.
: scope 속성을 이용한다.
- singleton : 컨테이너에 한 개의 빈 객체만 생성한다.(default)
- prototype : 빈을 요청할 때마다 빈 객체를 생성한다.
- request : HTTP 요청마다 빈 객체를 생성한다.(WebApplicationContext에서만 적용)
- session : HTTP 세션마다 빈 객체를 생성한다.(WebApplicationContext에서만 적용)
- global-session : 글로벌 HTTP 세션에 대한 빈 객체를 생성한다. 포트릸을 지원하는 컨텍스트에만 적용 가능하다.
# 스프링 컨테이너(Spring Container)
- BeanFactory : 빈 객체를 관리하고 각 빈 객체 간의 의존 관계를 설정해 주는 가장 단순한 컨테이너
* 대표적인 구현 클래스 : XmlBeanFactory
- ApplicationContext : BeanFactory 인터페이스를 상속받은 하위 인터페이스
* 대표적인 구현 클래스 : ClassPathXmlApplicationContext

# 빈 라이프 사이클(Bean Life Cycle)
: 스프링 컨테이너에 저장되는 빈 객체는 최소한 생성, 초기화, 소멸의 라이프 사이클을 갖게 된다.
: 스플링은 빈 객체의 생성, 초기화, 소멸뿐만 아니라 추가적인 단계를 제공하고 있으며 이를 통해 라이프 사이클에 따른 빈 객체의 상태를 정교하게 제어할 수 있다.
* lazy-init="true"
: 이 속성은 빈의 scope가 singleton일 경우에 사용할 수 있다.
: 기본적으로 빈은 ApplicationContext 생성시 singleton 객체들을 로딩하게 되지만 lazy-init을 true로 바꾸면 명시적인 객체를 참조할 때 생성하게 된다.
1. 빈의 인스턴스화(생성자 호출)
2. 필드값 설정
3. setBeanName() 메서드 호출
- BeanNameAware 인터페이스르 구현하고 있을 경우
4. setBeanFactory() 메서드 호출
- BeanFactoryAware 인터페이스를 구현하고 있을 경우
5. BeanPostProcessor의 postProcessBeforeInitializtion() 메서드 호출
- BeanFactory에 BeanPostProcessor 클래스가 관련되어 있을 경우
6. afterPropertiesSet() 메서드 호출
- InitializationBean 인터페이스를 구현하고 있을 경우
7. Custom 초기화 메서드 호출 (init-method)
- Custom 초기화 메서드가 정의되어 있을 경우
8. BeanPostProcessor의 postProcessAfterInitialization() 메서드 호출
- BeanFactory에 BeanPostProcessor 클래스가 관련되어 있을 경우
9. 빈 사용
//// 컨테이너가 종료할 때에는 다음 순서로 메서드가 호출된다.
1. destroy() 메서드 호출
- DisposableBean 인터페이스를 구현하고 있을 경우
2. Custom Destroy 메서드 호출 (destroy-method)
# Annotation(어노테이션)
@Required
- 속성 또는 setter메서드에 사용가능 (멤버 변수, setXxx())
- 필수 속성이 되게 함
@Autowired
- 속성, 생성자, setter메서드에 사용가능 (멤버 변수, setXxx(), ConstructMethod)
- 타입에 의존하는 객체를 삽입해 준다. (ByName, BㅇyType, constructor, autodetect)
@Qualifier
- @Autowired와 같이 사용
- 같은 타입의 빈 객체들이 있을 경우 특정 빈을 사용하도록 함
@Resource
- 필요한 자원을 자동으로 연결시켜줌
- name 속성이 없으면 타입으로 연결해준다.
@PostConstruct
- InitializationBean 인터페이스의 afterPropertiesSet() 메서드
- custom의 init-method
@PreDestroy
- DisposableBean 인터페이스의 destroy() 메서드
- custom의 destroy-method
@Component
- 자동으로 빈으로 등록되게 함
- 빈의 이름은 첫 문자만 소문자이고 나머지느 클래스 이름과 동일
- 빈의 이름을 지정해 주려면 @Component("myFoo");
- @Scope("prototype")으로 빈의 범위를 지정할 수 있음
- @Service
- @Controller
@Configuration
- 클래스에 선언
@ImportResource
- 클래스에 선언
- xml 설정 정보를 사용할 때
- @ImportResource("classpath:/article-repository.xml");
@Import
- 클래스에 선언
- @Configuration 클래스에서 다수의 @Configuration 클래스를 묶을 수 있음
- @import({ArticleServiceConfig.class, ArticleRepositoryConfig.class})
@Bean
- 새로운 빈 객체를 제공할 때 사용
- 메서드 리턴 유형의 빈이 자동으로 만들어짐
- 적용된 메서드의 이름을 빈의 식별 값으로 사용
- name 속성으로 빈의 이름을 수정할 수 있음
- autowire 속성을 사용해 자동 연관 처리가 가능
- initMethod 속성으로 라이프사이클 처리 가능
- @Bean 아래 @Scope(value="prototype") 으로 빈의 범위 지정 가능
'Spring Framwork' 카테고리의 다른 글
비트캠프 - 2020.03.13 Spring Framework (4) : DI(의존성 주입) (0) | 2020.03.13 |
---|---|
비트캠프 - 2020.03.11 Spring Framework (3) : 어노테이션 및 문법 (0) | 2020.03.11 |
비트캠프 - 2020/03/11 Spring Framework (2) : xml (0) | 2020.03.11 |
비트캠프 - 2020/03/10 Spring Framework (1) : 시작하기 (1) | 2020.03.10 |