2011-11-29 5 views
0

Spring과 Java 사용;aop에서 참조하지 않고 spring bean을 인스턴스화하는 방법 : aspect

나는 잘 작동하는 포인트 컷을 가지고 있습니다. 이제 봄부터 pointcut과 AOP를 제거하고 자바 코드 내부의 이벤트로 이벤트를 트리거하고 싶지만 스프링과 그 속성을 통해 호출되는 "myAdvice"빈을 원한다.

나는 Java 코드에서조차도 모든 조언을 해독하고 싶다. 조언이나 AOP의 흔적도 없다. 이미 좋은 이벤트 시스템이 작동하고있다. 그냥 봄 통해 콩을 인스턴스화하고 싶습니다.

두 번째 코드 블록 ("aop : config"로 시작하는 코드 블록)을 제거하면 bean "myAdvice"가 호출되지 않아 더 이상 인스턴스화되지 않는다는 것을 알게되었습니다. "aop : aspect"에서 참조하지 않고 속성을 설정하는 방법은 무엇입니까?

내 응용 프로그램 컨텍스트에서;

<bean id="myAdvice" class="com.myclass"> 
    <property name="name1" ref="ref1" /> 
    <property name="name2" ref="ref2" />   
</bean> 


<aop:config proxy-target-class="true"> 
    <aop:aspect id="myAspect" ref="myAdvice"> 
     <aop:pointcut id="myPointcut" expression="execution(* com.myexcmethod" /> 
     <aop:around pointcut-ref="myPointcut" method="invoke" /> 
    </aop:aspect> 
</aop:config> 
+0

무엇이'scope = "consultation"'입니까? 그걸 없앨 수 있니? – gigadot

+0

그리고 bean 이름은'myClvice'가 아닌'myAdvice'입니다. – gigadot

답변

0

구성이 정상적으로 보입니다. ApplicationContext가로드 될 때 bean은 싱글 톤 bean으로 인스턴스화되어야합니다. 어쩌면 콩을 열망하는 것을 막는 기본 지연 설정 (lazy-init) 설정이 있는지 확인할 수 있습니다.

0

당신이 빈 자체에서 얻을 수 있도록하려면, 당신은이 함수에 전달할 수 :

public static Object unwrapProxy(Object proxiedBean) throws Exception { 
    while(proxiedBean instanceof Advised) { 
     proxiedBean = ((Advised) proxiedBean).getTargetSource().getTarget(); 
    } 

    return proxiedBean; 
} 

주 당신이 포장을 푸는 것을 보장하기 위해 루프가 필요 모두 AOP 조언.

+0

감사하지만 Java 코드, AOP에 대한 더 이상의 조언이나 트레이스에 관해서라도 모든 조언을 해내 고 싶습니다. 좋은 이벤트 시스템이 작동해야합니다. 봄을 통해 콩을 인스턴스화합니다. – Spring

관련 문제