Spring方面如何在内部工作?

M S*_*ach 12 java spring aspectj spring-aop

Say Service调用需要应用日志方面(注释)的Dao类.我想知道方面实际上是如何应用的.

根据我在服务对象下注入DAO时的理解,spring发现有一些方面(在这种情况下是日志记录)是为DAO配置的,因此它会注入代理对象而不是实际的目标对象.现在,当对DAO中的任何方法进行实际调用时,代理应用方面,然后调用实际的目标对象.那是对的吗 ?另外我相信这叫做跑步编织.

另一方面,可以使用加载时间编织(使用javaagent配置)完成相同的操作,其中对需要应用方面的类执行字节代码操作.所以代理不会在这里出现.

如果我错了,请纠正我,因为这是所有弹簧模块的基础?

And*_*sne 12

你的理解是正确的.Spring AOP是基于代理的.Spring使用JDK代理(首选代理目标实现至少一个接口)或CGLIB代理(如果目标对象不实现任何接口)来为给定目标bean创建代理.

除非另有配置,否则Spring AOP会执行运行时编织.但是,您可以设置Spring通过AspectJ进行加载时编织.有关详细信息,请查看文档链接.

Spring AOP代理内部参考

  • 只是一个有用的引文 - "*计算机科学中的所有问题都可以通过另一层次的间接解决,当然除了太多的间接问题.*" - David Wheeler (3认同)
  • @AndyDufresne 您到 Spring AOP 内部的链接不起作用。 (2认同)