Spring AOP 生成的代理类的位置
Posted
技术标签:
【中文标题】Spring AOP 生成的代理类的位置【英文标题】:Location of the proxy class generated by Spring AOP 【发布时间】:2012-07-17 10:11:32 【问题描述】:只是为了学习和理解代理,我想看看Spring AOP生成的代理类。它不存在于 Eclipse 生成的类文件夹中。
谁能告诉我它的位置?
【问题讨论】:
【参考方案1】:如果您使用基于接口的代理(默认),Spring 使用Proxy
类在内存中动态创建代理。没有与该类关联的 .class
文件。
当使用基于类的代理时(通过cglib),Spring 会为您的类创建具体的子类。在调试器中,您会注意到它们的名称类似于 YourRealService$$EnhancerByCGLIB$$...
但同样,这些类仅在内存中生成,而不是存储在磁盘上。
如果你真的想深入了解 AOP,你将不得不使用aspectj 和编译时编织。工作量太大了。所以底线是:相信他们的工作。如果他们不这样做:检查堆栈跟踪。
【讨论】:
非常感谢 Tomasz 的精彩解释。我相信他们会工作 :) 我心中仍有一个问题。为什么很多人说在使用AOP时我们应该考虑内存限制,因为AOP会创建子类。它是否正确?即使 AOP 创建类,它也只使用代理类而不是我们创建的类。 @KhalidAnsari:很多动态生成的类(我认为这不适用于通过Proxy
创建的动态代理)将占用 PermGen 空间(而不是堆)。我从来没有遇到过任何问题,但请记住这一点。
怎么可能看到它们呢?我正在开发一个需要扩展 YourRealService$$EnhancerByCGLIB$$ 类的库,但我似乎找不到它们以上是关于Spring AOP 生成的代理类的位置的主要内容,如果未能解决你的问题,请参考以下文章