일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- rabbitmq 싱글톤
- 자바 1676
- 전략 패턴이란
- java 1509
- kotiln const val
- 백준 연결요소 자바
- ipfs singletone
- Java Call By Refernce
- java 팩토리얼 개수
- spring mongodb switch
- spring mongoTemplate
- 자바 백준 팩토리얼 개수
- ipfs bean
- 백준 2252 줄세우기
- kotiln const
- 백준 1504 java
- 백준 특정한 최단 경로
- mongodb lookup
- java 1238
- kotiln functional interface
- 안정해시
- spring mongoTemplate switch
- 익명 객체 @transactional
- java 파티
- javav 1676
- spring mongodb
- nodejs rabbitmq
- java 백준 1509
- go
- Spring ipfs
Archives
- Today
- Total
공부 흔적남기기
Spring BeanPostProcessor(빈 후처리기) 본문
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
반응형
'web study > Spring' 카테고리의 다른 글
Spring 익명 객체 함수에 @Transactional을 사용하면 어떻게 될까? (0) | 2024.10.28 |
---|---|
Spring mongodb id mapping bug (0) | 2024.01.05 |
프록시 팩토리 | Advice | Pointcut (0) | 2023.12.20 |
Spring Scheduler SchedLock MongoDB 설명 및 구현 (0) | 2023.12.01 |
Spring mongodb mongoTemplate project stage에서 switch 사용하기 (0) | 2023.11.28 |