
ApplicationContext(=고급 컨테이너)가 대표적이다. BeanFactory: 가장 기본 컨테이너(생성/연결/제거 등 라이프사이클 관리). 설정 메타데이터에 따라 동작.
ApplicationContext: BeanFactory + α.
국제화(MessageSource), 이벤트(ApplicationEventPublisher), 리소스 로딩(ResourceLoader) 등 부가기능 제공. 구현체 예)
GenericXmlApplicationContext (XML 설정)AnnotationConfigApplicationContext (자바 설정) ApplicationContext ctx =
new GenericXmlApplicationContext("section01/xmlconfig/spring-context.xml");
<beans ...>
<bean id="member" class="com.ohgiraffers.common.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>
</beans>
MemberDTO m1 = (MemberDTO) ctx.getBean("member");
MemberDTO m2 = ctx.getBean(MemberDTO.class);
MemberDTO m3 = ctx.getBean("member", MemberDTO.class);
@Configuration / @Bean)ApplicationContext ctx =
new AnnotationConfigApplicationContext(ContextConfiguration.class);
@Configuration
public class ContextConfiguration {
@Bean(name = "member")
public MemberDTO member() {
return new MemberDTO(1, "user01", "pass01", "홍길동");
}
}
MemberDTO m = ctx.getBean("member", MemberDTO.class);
@ComponentScan)@Component(일반), @Controller, @Service, @Repository, @Configuration 등.@ComponentScan(basePackages = "com.ohgiraffers")
public class ContextConfiguration {}
@ComponentScan(
basePackages = "com.ohgiraffers",
excludeFilters = {
@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = { MemberDAO.class })
}
)
// includeFilters도 유사하게 지정 가능, useDefaultFilters=false와 함께 사용
<beans ... xmlns:context="http://www.springframework.org/schema/context" ...>
<context:component-scan base-package="com.ohgiraffers"/>
<!-- <context:exclude-filter .../> / <context:include-filter .../> -->
</beans>
String[] names = ctx.getBeanDefinitionNames();
for (String n : names) System.out.println("beanName: " + n);
@Component + @ComponentScan으로 자동 등록@Bean으로 수동 등록빈 id 생략 규칙: @Bean 메서드명 / @Component 클래스명 첫 글자 소문자가 기본 id.
컨테이너별 생성자 전달:
new GenericXmlApplicationContext("...xml")new AnnotationConfigApplicationContext(Config.class)빈 조회 3형식: "id", Type, "id"+Type 조합 사용.