web study/Spring
Spring BeanPostProcessor(빈 후처리기)
65살까지 코딩
2023. 12. 22. 16:51
728x90
반응형
BeanPostProcessor란?
한국어로 그대로 번역하면 빈 후 처리기로
스프링 빈이 생성되기 전후(초기화 전후)에 IOC 컨테이너에 빈으로 등록되기전에
빈을 intercept해서 특정로직을 처리가능하게 해주는 스프링이 지원하는 객체이다.
주로 AOP를 사용하기위해 Proxy 객체를 생성해 IOC 컨테이너에 실제 빈 대신에
프록시를 넣을 떄 사용한다.
이 뿐만 아니라 다양하게 특정 빈이 초기화 되었을 때
어떤 로직을 실행한다던지 등 여러가지로 구현가능하다.
BeanPostProcessor는 다른 빈 등록보다 선행된다.
예시
BeanPostProcess를 상속받아 구현 가능하다.
class LogBeanPostProcessor(
private val packageName : String,
private val advisor: Advisor
) : BeanPostProcessor {
override fun postProcessAfterInitialization(bean: Any, beanName: String): Any? {
val beanPackage = bean.javaClass.packageName
if(beanPackage != packageName){
return super.postProcessAfterInitialization(bean, beanName)
}
val proxyFactory = ProxyFactory(bean)
proxyFactory.addAdvisor(advisor)
val proxy = proxyFactory.getProxy()
return super.postProcessAfterInitialization(proxy, beanName)
}
}
구현한 BeanPostProcessor를 빈으로 등록하자
@Configuration
class LogPostProcessorConfiguration {
@Bean
fun logBeanPostProcessor(logService: LogServiceDirtyCode): LogBeanPostProcessor {
return LogBeanPostProcessor("com.study.aop.item", getAdvisor(logService))
}
fun getAdvisor(logService: LogServiceDirtyCode): Advisor {
val logAdvice = LogAdvice(logService)
val pointCut = NameMatchMethodPointcut()
pointCut.setMappedNames("creat*", "get*", "save*", "find*")
return DefaultPointcutAdvisor(logAdvice)
}
}
cf). spring aop library 를 depedency에 추가하면 @Aspect나 Advisor를 component로 등록하면 자동으로 빈후처리기가 포인트 컷을 통해 프록시를 생성한다.
728x90
반응형