2011-11-29 97 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