这是从这个问题继续:
@Aspect方面的Spring autowired bean为null
我最初的理解是,当使用Spring AOP时,使用@Aspect注释的类被创建为spring managed beans,因此依赖注入将正常工作.但是,似乎带有@Aspect注释的对象被创建为弹簧容器外的单例,因此我必须像XML一样配置它,以便将其作为spring托管bean启用:
<bean id="aspect" class="com.mysite.aspect" factory-method="aspectOf" />
Run Code Online (Sandbox Code Playgroud)
这已经让我完全糊涂了.我认为以下配置将使用spring AOP:
<context:component-scan base-package="com.mysite.aspectPackage"/>
<aop:aspectj-autoproxy/>
Run Code Online (Sandbox Code Playgroud)
因此,它将使用组件扫描创建方面bean来扫描@Aspect注释,然后autoproxy将创建一个beanPostProcessor,它使用适当的建议代理我的上下文中的所有bean.然后我想要启用aspectJ我需要一个完全不同的XML配置(顺便说一下,我似乎无法在文档中找到一个例子).正是这种配置使用aspectJ来创建可以在我的容器之外的方面,或者通过操作字节码而不是代理来工作.
注意
这不是关于spring AOP和J方面之间差异的问题,这里有很好的阐述:
谁能告诉我为什么在使用弹簧靴时不会触发方面?我正在尝试使用 aspectj 设置加载时间编织,以便我可以建议私有方法。
这是准系统项目的链接 - https://github.com/satb/spring_aop_test_project.git
使用“-javaagent:path/to/spring-instrument-4.1.0.RELEASE.jar”(或计算机上其他版本的lib)运行“App”类并运行curl命令
curl -i http://localhost:8080/test-app/motd
Run Code Online (Sandbox Code Playgroud)
MyAspect 类有一个建议,应该在调用 MyService 的私有方法时执行。但在这种情况下,什么也不会发生。
但是,当应用程序启动时,我看到如下消息:
[AppClassLoader@58644d46] warning javax.* types are not being woven because the weaver option '-Xset:weaveJavaxPackages=true' has not been specified.
Run Code Online (Sandbox Code Playgroud)
我尝试按照这里的建议让它工作,但这没有帮助 -将 @Autowired 与 AspectJ 和 Springboot 一起使用