在春天可以对aspectj-autoproxy进行精细控制吗?

时间:2009-04-29 19:41:06

标签: java spring

如果我只是添加< aop:aspectj-autoproxy proxy-target-class =“false”/>在我的spring上下文的开头,实现接口的每个bean都获得一个JDK代理。我真的想将代理A)限制为实际需要代理的类或B)我指定为需要代理的类。

我尝试在xml bean定义中使用aop:scoped-proxy节来获取需要代理的bean,但事实证明这似乎没有给我一些建议。

我还尝试添加< aop:aspectj-autoproxy ....>接近我的spring xml文件的末尾,但在添加所有需要代理的bean之前,但它似乎无法正常工作。

我有一个带有接口的bean的很多,但只有一个(明确定义的)极少需要AoP建议,而这些代理正在搞乱我的堆栈大量时间。 (我已经偷看了3.0的春天,并怀疑它有可能在那里,但似乎它已经有一段时间了)。

这可能在2.5.X中吗?

1 个答案:

答案 0 :(得分:4)

从AbstractAdvisorAutoProxyCreator.java第67行(Spring 2.5.6)中可以看出,autoproxy创建者实际上只做我要求的。它不会超出它认为必要的自动过程。

事实证明,你使用的那种切入点表达式会极大地影响这个类的代理程度;我正在使用的注释是

@Around(value="@target(myannotation)")

这基本上意味着spring生成一个代理,该代理决定根据实际调用目标的类型进行拦截。这样做的缺点是spring尝试使用applicationcontext中的所有可用bean来执行此操作。如果我在使用@ within之类的东西,那么spring会使用接口来决定是否应该进行自动代理,这可以在构建applicationcontext时静态确定。

所以现在我只有两个被代理的类;)