@Bean
으로 직접 등록하거나 컴포넌트 스캔을 하면 스프링 빈을 등록하면 컨테이너에 등록된다.
빈이 컨테이너에 등록하기 전에 무언가 조작하고 싶다면 빈 후처리기를 사용하면 된다.
빈 후처리기(BeanPostProcessor)는 빈이 컨테이너에 등록하기 직전에 빈을 조작하기 위해 사용된다. → 빈 등록과정에서 빈을 hooking한다.
빈 객체 내부를 조작할 수도 있고, 심지어 객체를 다른 객체로 바꿔치기할 수도 있다..!
빈 등록 과정을 빈 후처리기와 함께 살펴보자.
빈 후처리기 사용하기 전에 일반적인 스프링 빈 등록과정을 살펴보자.
컨텍스트 생성하고… 등록하면 된다.
public class BasicTest {
@Test
void basicTest() {
ApplicationContext ac = new AnnotationConfigApplicationContext(BasicConfig.class);
//A는 빈으로 등록된다.
A a = ac.getBean("beanA", A.class);
a.helloA();
//B는 등록되지 않았다.
Assertions.assertThrows(NoSuchBeanDefinitionException.class, ()-> ac.getBean(B.class));
}
@Slf4j
@Configuration
static class BasicConfig {
@Bean(name = "beanA")
public A a() {
return new A();
}
}
@Slf4j
static class A {
public void helloA(){
log.info("hello A");
}
}
@Slf4j
static class B {
public void helloB(){
log.info("hello B");
}
}