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
- JPQL
- Spring Boot
- jpa
- 스프링 핵심 원리
- 스프링 핵심 기능
- http
- SpringBoot
- Proxy
- AOP
- 백준
- 자바
- pointcut
- 그리디
- Thymeleaf
- java
- springdatajpa
- spring
- Exception
- kotlin
- 스프링
- 김영한
- db
- transaction
- QueryDSL
- Greedy
- JDBC
- Servlet
- Android
- 알고리즘
- 인프런
Archives
- Today
- Total
개발자되기 프로젝트
Advisor - 예제 본문
어드바이저는 하나의 포인트컷과 하나의 어드바이스를 가지고 있다.
프록시 팩토리를 통해 프록시를 생성할 때 어드바이저를 제공하면 어디에 어떤 기능을 제공할 지 알 수
있다.
1. 예제코드
public class AdvisorTest {
@Test
void advisorTest1(){
ServiceInterface target = new ServiceImpl();
ProxyFactory proxyFactory = new ProxyFactory(target);
DefaultPointcutAdvisor advisor = new DefaultPointcutAdvisor(Pointcut.TRUE, new TimeAdvice());
proxyFactory.addAdvisor(advisor);
ServiceInterface proxy = (ServiceInterface) proxyFactory.getProxy();
proxy.save();
proxy.find();
}
}
- new DefaultPointcutAdvisor
- Advisor 인터페이스의 가장 일반적인 구현체이다.
- 생성자를 통해 하나의 포인트컷과 하나의 어드바이스를 넣어주면 된다.
- 어드바이저는 하나의 포인트컷과 하나의 어드바이스로 구성된다.
- Pointcut.TRUE
- 항상 true 를 반환하는 포인트컷이다.
- 이후에 직접 포인트컷을 구현해볼 것이다.
- new TimeAdvice()
- 앞서 개발한 TimeAdvice 어드바이스를 제공한다.
- proxyFactory.addAdvisor(advisor)
- 프록시 팩토리에 적용할 어드바이저를 지정한다.
- 어드바이저는 내부에 포인트컷과 어드바이스를 모두 가지고 있다.
- 따라서 어디에 어떤 부가 기능을 적용해야 할지 어드바이스 하나로 알 수 있다.
- 프록시 팩토리를 사용할 때 어드바이저는 필수이다.
- 그런데 생각해보면 이전에 분명히 proxyFactory.addAdvice(new TimeAdvice()) 이렇게 어드바이저가 아니라
- 어드바이스를 바로 적용했다.
- 이것은 단순히 편의 메서드이고 결과적으로 해당 메서드 내부에서 지금 코드와 똑같은 어드바이저가 생성된다.
- DefaultPointcutAdvisor(Pointcut.TRUE, new TimeAdvice())
2. 어드바이저 관계
3. GitHub : 211231 Pointcut, Advice, Advisor
'인프런 > [인프런] 스프링 핵심 원리 - 고급' 카테고리의 다른 글
Pointcut - 스프링이 제공하는 pointcut (0) | 2021.12.31 |
---|---|
Advisor - 예제, PointCut 만들기 (0) | 2021.12.31 |
Pointcut, Advice, Advisor - 소개 (0) | 2021.12.31 |
[프록시팩토리] 프록시 팩토리-예제2, CGLIB (0) | 2021.12.31 |
[프록시 팩토리] 프록시 팩토리 - 예제1 (0) | 2021.12.30 |
Comments