以下是对这个问题的跟进:
Spring autowired bean for @Aspect aspect is null
我最初的理解是,在使用Spring AOP时,用@Aspect注释的类会被创建为Spring管理的bean,所以依赖注入会像正常情况下一样工作。然而,似乎使用@Aspect注解的对象会在spring容器之外创建为单例,因此我需要像以下方式在XML中进行配置,才能使其成为Spring管理的bean:
<bean id="aspect" class="com.mysite.aspect" factory-method="aspectOf" />
这现在完全把我搞糊涂了。我原本认为以下配置会使用Spring AOP:
<context:component-scan base-package="com.mysite.aspectPackage"/>
<aop:aspectj-autoproxy/>
因此,使用 component-scan 扫描 @Aspect 注解创建切面并创建切面 bean,然后 autoproxy 会创建一个 beanPostProcessor ,用适当的建议代理上下文中的所有 bean。 我之后认为需要启用 aspectJ ,我需要完全不同的 XML 配置(顺便说一句,在文档中我似乎找不到示例)。 此配置将使用 aspectJ 创建切面,这些切面将位于容器外部或通过操作字节码而不是代理实现。注意:这不是关于 Spring AOP 和 AspectJ 之间差异的问题,这在这里已经有很好的阐述了:Spring AOP vs AspectJ。