如果我使用的是基于AspectJ的Spring AOP,那么我是否需要配置我的方面来使用加载时间编织?或者Spring AOP在使用基于AspectJ的方法时也支持运行时/编译时编织吗?
Spring AOP是基于代理的。除非配置为执行其他操作,否则Spring AOP将执行运行时编织。
编织:将方面与其他应用程序类型或对象链接起来,以创建一个建议的对象。这可以在编译时(例如使用AspectJ编译器)、加载时或运行时完成。Spring AOP和其他纯Java AOP框架一样,在运行时执行编织。
来源:http://docs.spring.io/spring/docs/4.0.1.release/spring-framework-reference/htmlsingle/#aop-introple-defn
阅读文档(链接)时,我很难理解这些段落(可能也是因为英语不是我的母语)。 首先,我读 此外,在某些环境中,这种支持允许加载时编织,而不需要对应用程序服务器的启动脚本进行任何修改,以添加或(如我们在本节后面所述)(以前命名为)。 而且 哪些档案?类和文件? 然后,在同一子章中描述一个例子时,他们说 我们还有最后一件事要做。本节的介绍确实说过,可以在Spring的每个基础上有选择地打开LTW,这是事实
但还是毫无头绪。
我通过jUnit测试执行这个。我正在分叉执行,以便可以传入JavaAgent。 并设置了aop.xml文件 生成的日志看起来一切都很好。 [junit]信息[main](DefaultContextLoadTimeWeaver.java:73)-找到Spring的JVM instrumentation代理[junit][AppClassLoader@12360BE0]信息AspectJ Weave
和位于同一个包中,编织工作在直接实例化的包上,而不是bean返回的包上。 我搜索了Spring AOP文档,但似乎找不到任何与此相关的内容。对于自动代理,您需要做一些魔术,对于SpringAOP也需要做一些限制,但是加载时间编织就我所知应该可以工作--例如,我已经尝试过私有方法,它可以工作。
我参与了一个较老项目的审查任务。任务是将某些库更新到更新的版本。这个项目成功地使用了spring(4.3.14.Release),以及JDK 8下的AspectJ(1.9.0)和Tomcat8.0.20。现在spring将更新到最新版本(目前为5.3.3),Tomcat版本也将提升到最新版本(目前为9.0.37)。服务器应该在JDK11下运行。升级库后,我们意识到AspectJ不再工作了。所以我开