BeanPostProcessor는 빈의 생명주기에 접근하여 구성을 수정할 수 있는 기능을 제공하는 인터페이스이다.
객체 조작 및 완전히 다른 객체로 바꿔치기할 수 도 있다. (프록시 객체)
postProcessBeforeInitialization(): 전처리postProcessAfterInitialization(): 후처리

위 사진은
BeanPostProcessor의 default 메서드이다.
리턴 타입이Object로 매개변수로 받은 객체와 타입이 일치하지 않아도 동작한다.
예시
CodeService를 구현한 CodeServiceImpl가 있기에 API 호출시 랜덤 UUID를 반환할 것이다.
@Service
public class CodeServiceImpl implements CodeService {
@Override
public String generate() {
return UUID.randomUUID().toString();
}
}그러나 BeanPostProcessor를 사용하여 빈 저장소에 등록하기 전에 가로채어 로직을 제어할 수 있다.
@Configuration
public class CodeServiceProxyConfig {
@Bean
public BeanPostProcessor codeService(){
return new BeanPostProcessor() {
@Override
public @Nullable Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof CodeService){
return new CodeService() {
@Override
public String generate() {
return "123456";
}
};
}
return bean;
}
};
}
}