반응형
0. 개요
앞선 Dao를 분리하는 작업을 하면서 생성한 오브젝트를 스프링에서는 빈이라고 부른다. 스프링에서 이러한 Bean을 IoC방식에 따라 생성하고 관계를 설정하는것을 컨테이너(빈 팩토리)가 담당한다. 보통 빈팩토리 대신 application context를 주로 사용한다. application context는 빈 팩토리보다 좀 더 확장된 기능을 가지고 있고 일종의 설정 파일을 읽어 빈을 생성하고 관계를 정의해주는 역할을 담당한다.
1. 컨테이너 설정파일
다음과 같이 Java로 설정파일을 작성할 경우 @Configuration이라는 어노테이션에 따라 이 클래스를 컨테이너가 사용할 설정 파일임을 명시한다. 또한 @Bean 어노테이션에 따라 오브젝트 생성을 담당하는 IoC기반의 메소드임을 표시한다.
@Configuration
public class DaoFactory
@Bean
public UserDao userDao(){
return new UserDao(connectionMaker());
}
@Bean
public ConnectionMaker connectionMaker() {
return new DConnectionMaker();
}
}
2. 컨테이너 실행
public class UserDaoTest
public static void main(String[] args) throws ClassNotFoundException, SQLException {
ApplicationContext context = new AnnotationConfigApplicationContext(DaoFactory.class);
UserDao dao = context.getBean("userDao", UserDao.class);
....
}
3. 컨테이너(애플리케이션 컨텍스트) 동작 방식 및 장점
동작방식
- @Configuration이 붙은 설정파일을 읽고 @Bean이 붙은 메소드를 가져와 빈 목록을 만들어둔다
- getBean의 userDao (@Bean이 붙은 userDao 메소드)를 실행하고 반환 오브젝트를 UserDao.class에 주입한다.
장점
- 클라이언트는 구체적인 팩토리 클래스를 알 필요가 없다. 직접 Factory클래스를 구현하게 되면 userDao가 많아질수록 구현해야할 Factory가 많아지게되는데 그럴 필요가 없다.
- 빈의 생성 뿐만 아니라, 빈의 생성 방식, 시점, 인터셉팅 등 다양한 기능을 수행할 수 있다.
반응형
'프로그래밍 > 시큐어코딩' 카테고리의 다른 글
[스프링 이해와 원리] #4. 스프링 의존성 주입 (0) | 2020.07.07 |
---|---|
[스프링 이해와 원리] #3. 싱글톤 레지스트리와 오브젝트 스코프 순서3 (0) | 2020.07.07 |
[스프링 이해와 원리] #1. 난감한 Dao, DaoI? (0) | 2020.07.06 |
[시큐어 코딩] #12. 적절한 인증 없는 중요기능 허용 (0) | 2020.07.06 |
[시큐어 코딩] #11. 무결성 점검 없는 코드 다운로드 (0) | 2020.07.06 |