2014-01-11 6 views
2

@DeclareMixin을 Spring AOP와 함께 사용할 수 있습니까? 아니면 @DeclareParents 만 지원합니까?@DeclareMixin with Spring AOP?

나는 자바 빈에 java.beans.PropertyChangeSupport의에 혼합 측면 쓰고 싶은 :

public class PropertyChangeSupportWithInterface extends PropertyChangeSupport 
    implements IObservableBean { 

    public PropertyChangeSupportWithInterface(Object sourceBean) { 
    super(sourceBean); 
    }  
} 

(IObservableBean 단순히 의해 PropertyChangeSupport에서 모든 공용 메소드를 포함)

@Aspect 
@Named 
public class ObservableAspect{ 
    @DeclareMixin("@ObservableBean *") 
    public static IObservableBean createDelegate(Object object) { 
     return new PropertyChangeSupportWithInterface(object); 
    } 
} 

그것을 이 aspect가 결코 사용되지 않는 것 같아서 @DeclareMixin이 Spring AOP에 의해 수행 된 런타임 짜임새에 의해 지원되지 않는다고 생각하게 만든다.

스프링 AOP에서 작동하는 방법이 있습니까?

당신은 (하지) 여기 예를 실행 (메이븐 멀티 모듈 프로젝트를) 찾을 수

https://github.com/BernhardBln/SpringAOPObservableBean

가 springaop - 관찰 - 콩 - 가로 세로 서브 모듈에 (만) 테스트 케이스를 참조하십시오.

답변

1

아니요, 상자 외부의 Spring AOP에서는 지원되지 않습니다. 두 가지 옵션이 있습니다.

  • A 봄 AOP 용으로 DeclareMixinIntroductionInterceptor을 만듭니다. AspectJ를

나는 보통 당신이 프로토 타입 콩에 대한 프록시를 많이 만들 것하고는 예를 들어 ORM에 의해, 프레임 워크에서 쉽게 생성 될 수 있기 때문에 PropertyChange 인터페이스는 AspectJ를 더 나은 맞는 생각에

  • 전환합니다.

    편집

    그러나 나도이 기능에 관심이 있어요 그리고 난 이미 사용 그것에 대한 몇 가지 작업을 수행 :

  • 경우에만 위의 AdvisorFactoryAnnotationAwareAspectJAutoProxyCreator을 구성하는 유형 DeclareMixinAutoProxyCreatorConfigurer 의 빈을 선언 할 필요를 사용합니다.

    저는 테스트 중이지만 제대로 작동하는 것 같습니다.

    +0

    안녕하세요 호세, 코드 작성에 많은 감사를드립니다. 하지만 스프링에서 인터셉터를 어떻게 사용합니까? 주석 기반 처리를 사용하고 있습니다. 아니면 XML을 통해서만 할 수 있습니까? – Bernhard

    +0

    @Bernhard 이미 주석을 사용하고 있습니다. 편집을 참조하십시오. –