2011-11-29 98 views
0

使用Spring和Java;如何實例化spring bean,而不從aop引用:方面

我有一個切入點,它工作正常。現在我想從spring中刪除切入點和AOP,並且只需從java代碼中的事件觸發事件,但是我希望「myAdvice」bean仍然通過Spring調用並設置其屬性。

即使在java代碼中,我想要擺脫所有的建議事情,沒有更多的建議或AOP的任何痕跡,我已經有一個很好的事件系統工作。 我只是想通過Spring實例化我的bean。

當我刪除第二個代碼塊(一個以「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

什麼是'範圍=「諮詢」'?你可以刪除嗎? – gigadot

+0

並且bean的名字是'myAdvice'而不是'myClass' – gigadot

回答

0

你的配置看起來很好。當ApplicationContext加載時,你的bean應該被實例化爲單例bean。也許你會想檢查一下,如果你有一個默認的懶惰初始化設置,可以防止加載這些bean。

0

如果你希望能夠得到在bean本身,你可以將它傳遞到這個函數:

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

    return proxiedBean; 
} 

請注意,你需要有迴路,以保證你解開全部的AOP建議。

+0

謝謝,但是我想要在Java代碼中拋棄所有的建議事情,沒有更多的建議或任何AOP的痕跡,我有一個很好的事件系統working.I只需要通過spring實例化我的bean。 – Spring