728x90
1. @Bean(intMethod, destroyMethod)
public class A {
@Autowired private B b;
public A(B b) {
this.b = b;
}
//@PostConstruct
void init(){
log.error("A post construct");
}
//@PreDestroy
void destroy(){
log.error("A post destroy");
}
}
기존에 사용하던 @PostConstruct , @PreDestroy 어노테이션을 사용하지 않고 아래의 코드블럭에서 보다시피 외부에서 설정이 가능하다.
@Configuration
public class AppConfig {
@Bean
public B b(){
return new B();
}
@Bean(initMethod = "init",destroyMethod = "destroy")
public A a(B b){
return new A(b);
}
}
@Bean(initMethod = "init", destroyMethod = "destroy") 어노테이션의 옵션을 사용하여 @PostConstruct, @PreDestroy를 대신할 수 있다.
이렇게 하는 이유는 destroy()라는 함수에 @PreDestroy 어노테이션을 달면 A라는 클래스의 설정값이 들어가게 된다.
가능하면 특정 클래스에는 그 클래스에서 필요한 정보만 넣고 설정값들은 외부에서 관리하는 것이 더 좋다.
※위와 같이 XML설정 보다 @Configuration, @Bean설정을 이용해서 개발에 사용하면 자바클래스지만 설정이 필요한 자바클래스, 비지니스 로직이 필요한 자바클래스 이렇게 구분이 가능해진다.
2. @Bean(name)
@Configuration
public class AppConfig {
@Bean(name = "myThing")
public Thing thing() {
return new Thing();
}
@Bean({"dataSource", "subsystemA-dataSource", "subsystemB-dataSource"})
public DataSource dataSource() {
}
@Bean 설정만 하게 되면 함수명이 카멜 표기법으로 Bean이름이 설정된다.
하지만 name 옵션을 설정하면 name이름으로 커스터마이징이 가능하다. (배열의 형식으로 Alias 설정도 가능)
3. @Import(Class)
@Configuration
public class ConfigA {
@Bean
public A a() {
return new A();
}
}
@Configuration
@Import(ConfigA.class)
public class ConfigB {
@Bean
public B b() {
return new B();
}
}
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(ConfigB.class);
// now both beans A and B will be available...
A a = ctx.getBean(A.class);
B b = ctx.getBean(B.class);
}
ConfigB.class를 Bean으로 등록하지만 @Import(ConfigA.class) 때문에 A.class도 Bean으로 등록된다.
※ComponentScan쓰면 되만 @Import는 보통 테스트코드 작성할때 쓰면 좋다.
설정이 복잡한 경우 테스트코드에서 @Import를 사용하면 조금 더 간편해지기 때문!
728x90
'Spring' 카테고리의 다른 글
[Spring] 예제로 보는 Resources (0) | 2020.05.29 |
---|---|
[Spring] 예제로 보는 Environment Abstraction (0) | 2020.05.27 |
[Spring] 예제로 보는 Using JSR 330 Standard Annotations (0) | 2020.05.19 |
[Spring] 예제로 보는 Classpath Scanning and Managed Components (0) | 2020.05.18 |
[Spring] 예제로 보는 Annotation-based Container Configuration (0) | 2020.05.12 |