Java 启用Spring AOP或AspectJ
以下是本问题的内容: 我最初的理解是,当使用SpringAOP时,用@Aspect注释的类被创建为Spring管理的bean,所以依赖注入将正常工作。然而,带有@Aspect注释的对象似乎是在spring容器外创建为单例的,因此我必须像这样用XML对其进行配置,以便将其作为spring托管bean启用:Java 启用Spring AOP或AspectJ,java,spring,aop,spring-aop,Java,Spring,Aop,Spring Aop,以下是本问题的内容: 我最初的理解是,当使用SpringAOP时,用@Aspect注释的类被创建为Spring管理的bean,所以依赖注入将正常工作。然而,带有@Aspect注释的对象似乎是在spring容器外创建为单例的,因此我必须像这样用XML对其进行配置,以便将其作为spring托管bean启用: <bean id="aspect" class="com.mysite.aspect" factory-method="aspectOf" /> 这让我完全糊涂了。我认为以下
<bean id="aspect" class="com.mysite.aspect" factory-method="aspectOf" />
这让我完全糊涂了。我认为以下配置将使用spring AOP:
<context:component-scan base-package="com.mysite.aspectPackage"/>
<aop:aspectj-autoproxy/>
@Aspect
不是spring注释,组件扫描无法检测到它。因此,您必须以某种方式将其注册为Springbean。解决方案的方面起作用。你也可以试试
@Aspect
@Component
@组件将创建两个实例,一个在Spring容器内,一个在aspectJ容器内
使用@Configurable允许spring在aspectj容器实例化时管理类的依赖项注入等
@Aspect是SpringAOP支持的aspectj样式的注释,其中运行时编织用于处理拦截等
编译时编织允许您忽略使用,因为切入点将出现在字节码中,这是通过aspectj编译器完成的(请参阅mvn集成)
无论您使用aspectj编译器还是SpringAOP都没有区别,除非您使用factory/configurable,否则它不会以您想要的方式将方面创建为托管bean
严格来说,Aspectj配置是类中出现的切入点定义等 使用
@Aspect
@可配置
还要在XML配置文件中添加“ ” 那么aspectJ配置和SpringAOP配置之间的区别是什么呢?这行得通吗?我发现,如果我这样做,spring会创建两个类实例,而作为方面使用的一个实例没有注入依赖项。我在spring 4.3中尝试了这一点,并用@aspect
@Component
注释方面,即使在DI中也能很好地工作,正如@Bozho在回答中所写的那样