Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- Spring Boot
- spring
- Greedy
- 스프링
- 그리디
- QueryDSL
- pointcut
- 김영한
- db
- 인프런
- Exception
- java
- JDBC
- 스프링 핵심 기능
- http
- Android
- jpa
- SpringBoot
- 스프링 핵심 원리
- springdatajpa
- transaction
- AOP
- 자바
- JPQL
- Proxy
- 백준
- 알고리즘
- Thymeleaf
- kotlin
- Servlet
Archives
- Today
- Total
개발자되기 프로젝트
프록시팩토리 - 적용 2 본문
이번에는 인터페이스가 없고, 구체 클래스만 있는 v2 애플리케이션에 LogTrace 기능을 프록시 팩토리를
통해서 프록시를 만들어 적용해보자.
Advice는 동일하니 Config만 새로 만들면 된다.
1. Config
@Slf4j
@Configuration
public class ProxyFactoryConfigV2 {
@Bean
public OrderControllerV2 orderControllerV2(LogTrace logTrace){
OrderControllerV2 orderController = new OrderControllerV2(orderServiceV2(logTrace));
ProxyFactory proxyFactory = new ProxyFactory(orderController);
proxyFactory.addAdvisor(getAdvisor(logTrace));
OrderControllerV2 proxy = (OrderControllerV2) proxyFactory.getProxy();
log.info("Proxyfactory proxy={}, target={}", proxy.getClass(), orderController.getClass());
return proxy;
}
@Bean
public OrderServiceV2 orderServiceV2(LogTrace logTrace){
OrderServiceV2 orderService = new OrderServiceV2(orderRepositoryV2(logTrace));
ProxyFactory proxyFactory = new ProxyFactory(orderService);
proxyFactory.addAdvisor(getAdvisor(logTrace));
OrderServiceV2 proxy = (OrderServiceV2) proxyFactory.getProxy();
log.info("Proxyfactory proxy={}, target={}", proxy.getClass(), orderService.getClass());
return proxy;
}
@Bean
public OrderRepositoryV2 orderRepositoryV2(LogTrace logTrace){
OrderRepositoryV2 orderRepository = new OrderRepositoryV2();
ProxyFactory proxyFactory = new ProxyFactory(orderRepository);
proxyFactory.addAdvisor(getAdvisor(logTrace));
OrderRepositoryV2 proxy = (OrderRepositoryV2) proxyFactory.getProxy();
log.info("Proxyfactory proxy={}, target={}", proxy.getClass(), orderRepository.getClass());
return proxy;
}
private Advisor getAdvisor(LogTrace logTrace) {
//point cut
NameMatchMethodPointcut pointcut = new NameMatchMethodPointcut();
pointcut.setMappedNames("request*", "order*", "save*");
//advice
LogTraceAdvice advice = new LogTraceAdvice(logTrace);
return new DefaultPointcutAdvisor(pointcut, advice);
}
}
2. 실행
@Import(ProxyFactoryConfigV2.class)
@SpringBootApplication(scanBasePackages = "hello.proxy.app") //주의
public class ProxyApplication {
public static void main(String[] args) {
SpringApplication.run(ProxyApplication.class, args);
}
@Bean
public LogTrace logTrace(){
return new ThreadLocalLogTrace();
}
}
Proxyfactory proxy=class hello.proxy.app.v2.OrderRepositoryV2$$EnhancerBySpringCGLIB$$90482bf4, target=class hello.proxy.app.v2.OrderRepositoryV2
Proxyfactory proxy=class hello.proxy.app.v2.OrderServiceV2$$EnhancerBySpringCGLIB$$e4985a17, target=class hello.proxy.app.v2.OrderServiceV2
Proxyfactory proxy=class hello.proxy.app.v2.OrderControllerV2$$EnhancerBySpringCGLIB$$924f52aa, target=class hello.proxy.app.v2.OrderControllerV2
- V2 애플리케이션은 인터페이스가 없고 구체 클래스만 있기 때문에 프록시 팩토리가 CGLIB을 적용한다.
- 애플리케이션 로딩 로그를 통해서 CGLIB 프록시가 적용된 것을 확인할 수 있다.
3. GitHub : 220101 ProxyFactory 2
'인프런 > [인프런] 스프링 핵심 원리 - 고급' 카테고리의 다른 글
[빈 후처리기] Bean Post Processor - 소개 (0) | 2022.01.02 |
---|---|
프록시팩토리- 정리 (0) | 2022.01.01 |
프록시 팩토리 - 적용1 (0) | 2022.01.01 |
여러 개의 Advisor 적용 (0) | 2022.01.01 |
Pointcut - 스프링이 제공하는 pointcut (0) | 2021.12.31 |
Comments