【问题标题】:Is fine grained control of aspectj-autoproxy possible in spring?春季可以对aspectj-autoproxy进行细粒度控制吗?
【发布时间】:2009-04-29 19:41:06
【问题描述】:

如果我只是将 添加到我的 spring 上下文的开头,那么每个实现接口的 bean 都会获得一个 JDK 代理。我真的很想将代理 A) 限制为实际需要代理的类或 B) 我指定为需要代理的类。

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

我还尝试在我的 spring xml 文件末尾附近添加 ,但在添加所有需要代理的 bean 之前,它似乎无法正常工作。

我有 很多 个带有接口的 bean,但只有少数(定义明确的)需要 AoP 建议,而这些代理正在严重破坏我的堆栈跟踪。 (我看过 spring 3.0 并怀疑它在那里是可能的,但似乎还有一段时间)。

这在 2.5.X 中可行吗?

【问题讨论】:

    标签: java spring


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-06-23
      • 1970-01-01
      • 2019-05-20
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-18
      相关资源
      最近更新 更多