java - 使用 Spring AOP 时是否代理了所有方法?

标签 java spring aop dynamic-proxy

当使用 Spring AOP 为使用 NameMatchMethodPointcutAdvisor 的类创建代理时和 BeanNameAutoProxyCreator这是否实质上代理了对该对象的每次调用,但仅将建议应用于匹配的方法,或者以某种方式创建一个仅具有这些方法并使用普通对象进行应该被拦截的调用的 Proxied 对象?

我想我的理解是,它确实代理了对对象的每次调用,但随后仅在匹配的方法上调用 Advisor - 但我找不到好的示例/帖子来证实这一点。

最佳答案

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

  • JDK 动态代理是接口(interface)代理 - 正如您所说,接口(interface)的每个方法都通过代理,如果匹配恰好是“建议”方法,则应用顾问程序。否则委托(delegate)给原对象

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

但是,无论使用哪种机制:

关于java - 使用 Spring AOP 时是否代理了所有方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2299185/

相关文章:

java - 在 JSTL 中接受对象

java - 如何记录 EnvironmentPostProcessor 执行中的错误

java - AspectJ 类型模式适用于所有具有属性的方法的类型?

c++ - AspectC++ 入门

java - 客户端(Java)未连接到服务器(Kotlin)Android Studio,出了什么问题?

java - Spring MVC默认Locale和Locale改变不起作用

java - Java中通过super访问方法和变量

Spring - 如何使用 aspectJ 缓存自调用?

spring - 为 Tomcat 构建的 Maven WAR : "Could not open ServletContext resource [/WEB-INF/applicationContext.xml]"

scala - Scala 中 AOP 风格的 Mixin 组合