// Spring Container 생성
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(DependencyConfig.class);
// 인스턴스화 하여 이용한다.
@Configuration
public class DependencyConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemberRepository();
}
@Bean
public CoffeeService coffeeService() {
return new CoffeeService(coffeeRepository());
}
@Bean
public CoffeeRepository coffeeRepository() {
return new CoffeeRepository();
}
}
@Configuration 이 붙은 클래스를 이용하는 방법은 위와 같이 스프링 컨테이너의 파라미터에 넣어 이용한다.
그렇게하면 DependencyConfig안의 Bean들이 모두 등록되어 이용할 수 있다.
@Configuration
@ComponentScan
public class AutoDependencyConfig {
}
해당 코드처럼만 짜놓으면 @ComponentScan이 @Component가 붙은 클래스를 알아서 찾아 적용시킨다.
@Autowired(required = false)
public void setNoBean1(Member noBean1) {
System.out.println("noBean1 = " + noBean1);
}
// 출력결과에는 안나오게됨
@Configuration
public class DependencyConfigA {
@Bean
public A a() {
return new A();
}
}
@Configuration
@Import(DependencyConfigA.class) <------------------------
public class DependencyConfigB {
@Bean
public B b() {
return new B();
}
}
컨텍스트를 인스턴스화할 때 DependencyConfigA.class와 DependencyConfigB.class 모두 지정하는 대신 DependencyConfigB만 제공하면 된다.
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(DependencyConfigB.class);
// now both beans A and B will be available...
A a = ctx.getBean(A.class);
B b = ctx.getBean(B.class);
}
@Configuration
@EnableAspectJAutoProxy
public class AppConfig {
}