사용자 도구

사이트 도구


springframework:aop

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
springframework:aop [2014/05/29 16:59]
kwon37xi [DefaultAdvisorAutoProxyCreator]
springframework:aop [2021/03/03 17:12] (현재)
kwon37xi
줄 7: 줄 7:
  
 ===== DefaultAdvisorAutoProxyCreator ===== ===== DefaultAdvisorAutoProxyCreator =====
 +  * 이 Bean은 Spring Advisor를 등록해서 AOP를 구현한다.
   * ''<aop:aspectj-autoproxy />'' 혹은 ''@EnableAspectJAutoProxy''를 사용하는 상황에서 [[http://docs.spring.io/spring/docs/3.2.4.RELEASE/javadoc-api/org/springframework/aop/framework/autoproxy/DefaultAdvisorAutoProxyCreator.html|DefaultAdvisorAutoProxyCreator]]를 사용하자, 어드바이스가 두 번씩 호출되는 현상이 발생했다.(AOP, advice, twice, called)   * ''<aop:aspectj-autoproxy />'' 혹은 ''@EnableAspectJAutoProxy''를 사용하는 상황에서 [[http://docs.spring.io/spring/docs/3.2.4.RELEASE/javadoc-api/org/springframework/aop/framework/autoproxy/DefaultAdvisorAutoProxyCreator.html|DefaultAdvisorAutoProxyCreator]]를 사용하자, 어드바이스가 두 번씩 호출되는 현상이 발생했다.(AOP, advice, twice, called)
   * ''<aop:aspectj-autoproxy />'' 혹은 ''@EnableAspectJAutoProxy''는 그 자체로 [[http://docs.spring.io/spring/docs/3.2.4.RELEASE/javadoc-api/org/springframework/aop/aspectj/annotation/AnnotationAwareAspectJAutoProxyCreator.html|AnnotationAwareAspectJAutoProxyCreator]]를 사용하는데, 이 클래스는 스스로 Spring의 Advisor들도 등록해주므로 ''DefaultAdvisorAutoProxyCreator''를 사용할 필요가 없다.   * ''<aop:aspectj-autoproxy />'' 혹은 ''@EnableAspectJAutoProxy''는 그 자체로 [[http://docs.spring.io/spring/docs/3.2.4.RELEASE/javadoc-api/org/springframework/aop/aspectj/annotation/AnnotationAwareAspectJAutoProxyCreator.html|AnnotationAwareAspectJAutoProxyCreator]]를 사용하는데, 이 클래스는 스스로 Spring의 Advisor들도 등록해주므로 ''DefaultAdvisorAutoProxyCreator''를 사용할 필요가 없다.
줄 16: 줄 17:
   * 이는 자식쪽 ApplicationContext에서 부모쪽 Bean을 **component-scan** 등으로 재생성했기 때문이다.   * 이는 자식쪽 ApplicationContext에서 부모쪽 Bean을 **component-scan** 등으로 재생성했기 때문이다.
  
 +===== Spring 3 AOP 종류에 따른 Class/Interface 차이 =====
 +==== proxyTargetClass = false ====
 +  * Java Inteface 기반 Proxy를 한다.
 +  * 프록시 대상 객체가 Interface를 구현하지 않거나 의도치 않게 부모 클래스가 구현한 인터페이스를 상속할 경우 프록시 대상 Concrete class로는 해당 타입을 못찾는 현상이 발생할 수 있다.
 +
 +==== proxyTargetClass = true ====
 +  * AOP Mode가 ''AdviceMode.PROXY''일 때만 가능.
 +  * Class 기반 Proxy인데, ''cglib''의 제약사항들이 있기 때문에 그를 따라야한다.
 +    * Default Constructor가 존재해야한다.
 +
 +===== 참조 =====
 +  * [[https://www.baeldung.com/spring-aop|Introduction to Spring AOP | Baeldung]]
  
  
springframework/aop.1401350367.txt.gz · 마지막으로 수정됨: 2014/05/29 16:59 저자 kwon37xi