代码之家  ›  专栏  ›  技术社区  ›  Gandalf

使用Spring AOP时是否所有方法都已代理?

  •  4
  • Gandalf  · 技术社区  · 14 年前

    使用SpringAOP为使用 NameMatchMethodPointcutAdvisor BeanNameAutoProxyCreator 这本质上是代理对对象的每个调用,但只将建议应用于匹配的方法,还是以某种方式创建一个代理对象,该对象仅具有这些方法,并使用普通对象进行应该被拦截的调用?

    2 回复  |  直到 12 年前
        1
  •  6
  •   reevesy onejigtwojig    12 年前

    取决于使用的技术(它可以通过属性进行配置 proxy-target-class 在aop配置中)

    • JDK动态代理是按接口的代理——正如您所说,接口的每个方法都通过代理,如果它恰好匹配一个“建议的”方法,则应用advisor。否则,它将委托给原始对象

    • CGLIB代理实际上是在具体类的运行时定义的子类。我不能确定这一点,但我假设只有“建议的”方法被重写,其余的保留超类的定义。

        2
  •  0
  •   matt b    14 年前

    这到底是怎么回事?当一个类引用被代理的类时,它只有一个引用。它必须调用代理类或非代理类。Spring无法知道您正在调用哪些方法,因此,如果需要调用建议的方法,则无法为您提供一种类型,如果不需要,则无法为您提供另一种类型。