@EnableAspectJAutoProxy(proxyTargetClass = true)
spring aop 구현 방식 - 프록시 방식(정확하게 다이나믹 프록시)
Spring AOP uses either JDK dynamic proxies or CGLIB to create the proxy for a given target object.
aspectJ aop 구현 방식 - BCI(Byte Code Instumentation)이란 Java의 Byte Code에 직접 수정
AspectJ의 @Aspect 어노테이션을 사용 가능하게 해준다. XML로 표현되는 <aop:aspectj-autoproxy> 같은 역할을 한다. 사용하기 위해서는 @Configuration 클래스를 써야한다. 위에 어노테이션을 사용하면 bci 방식으로 aop가 진행되는게 아니라 프록시 방식으로 진행된다.
spring 은 aop 를 구현하는데 있어서 proxy를 사용해서 aop를 구현한다!!!!
proxyTargetClass 에 대한 설명
Indicate whether subclass-based (CGLIB) proxies are to be created as opposed to standard Java interface-based proxies. The default is false.
-> proxyTargetClass를 알기 전에, 스프링은 비지니스 로직에 접근할때 객체로 바로 접근하는게 아니라 프록시를 통해 간접적으로 접근한다. 프록시 객체를 생성하는 방식은 객체가 인터페이스를 구현하고 있냐 없냐에 따라 두가지로 나뉨.
인터페이스를 구현 : Jdk Dynamic Proxy - 인터페이스로 구현해서 정의 되어 있지 않은 메서드는 aop 적용안됨.
인터페이스를 구현 안함 : CGLIB - 대상 클래스를 상속 받아 프록시를 구현해서, 클래스가 final인 경우 프록시 생성 불가.
proxyTargetClass 기본은 false, 인터페이스 - jdk dynamic proxy를 이용
true로 주면 인터페이스 - CGLIB으로 구현
'개발' 카테고리의 다른 글
rabbitmq tutorial 2 - Work Queues 와 Round Robbin (0) | 2018.12.04 |
---|---|
rabbitmq tutorial 1 - Docker로 띄우고 hello world 찍어보기 (0) | 2018.11.23 |
for each 돌면서 list 삭제 할때 문제. ConcurrentModificationException (0) | 2018.11.14 |
hibernate warning 원인과 해결방법 (0) | 2018.11.09 |
jwt(JSON Web Token) 토큰이란 (0) | 2018.09.11 |