阅读Spring AOP
文档(链接)时,我很难理解这些段落(可能也是因为英语不是我的母语)。
首先,我读
此外,在某些环境中,这种支持允许加载时编织,而不需要对应用程序服务器的启动脚本进行任何修改,以添加-javaagent:path/to/aspectjweaver.jar
或(如我们在本节后面所述)-javaagent:path/to/org.springframework.instrument-{version}.jar
(以前命名为spring-agent.jar
)。
而且
哪些档案?@aspect
类和aop.xml
文件?
然后,在同一子章中描述一个例子时,他们说
我们还有最后一件事要做。本节的介绍确实说过,可以在Spring的每个classloader
基础上有选择地打开LTW,这是事实。然而,对于本例,我们使用Java代理(随Spring提供)来打开LTW。我们使用以下命令运行前面显示的Main类:
-javaagent:C:/projects/foo/lib/global/spring-instrument.jar
如果我@enableLoadTimeWeaving
,我是否需要Spring-Instrument
Jar文件作为Java代理
?
我想答案是肯定的,因为我们需要在加载Class
文件之前向它添加字节码。但如能确认将不胜感激。
Jar的命名有点模棱两可,首先他们提到spring-agent.Jar
,然后他们使用org.springframework.instrument-{version}.Jar
,然后是spring-instrument.Jar
。
我们总是在谈论同一个Jar文件吗?
我从你问的另一个问题看出,你正在使用Spring Boot运行一个胖罐子。在这种情况下,您不需要@enableLoadTimeWeaving
或spring-instrument
(以前称为spring-agent
)。如果您不是在不控制代理路径的appserver中运行,请忽略它们。
我为您打开了一个关于文档中混淆的问题:https://github.com/spring-projects/spring-framework/issues/22429。
如果我使用的是基于AspectJ的Spring AOP,那么我是否需要配置我的方面来使用加载时间编织?或者Spring AOP在使用基于AspectJ的方法时也支持运行时/编译时编织吗?
但还是毫无头绪。
是否有可能拥有一个Scala Maven项目,并在Scala类中编译时编织AspectJ方面? 我已经能够使加载时编织工作,但到目前为止没有成功的编译时。
和位于同一个包中,编织工作在直接实例化的包上,而不是bean返回的包上。 我搜索了Spring AOP文档,但似乎找不到任何与此相关的内容。对于自动代理,您需要做一些魔术,对于SpringAOP也需要做一些限制,但是加载时间编织就我所知应该可以工作--例如,我已经尝试过私有方法,它可以工作。
我通过jUnit测试执行这个。我正在分叉执行,以便可以传入JavaAgent。 并设置了aop.xml文件 生成的日志看起来一切都很好。 [junit]信息[main](DefaultContextLoadTimeWeaver.java:73)-找到Spring的JVM instrumentation代理[junit][AppClassLoader@12360BE0]信息AspectJ Weave