And*_*ili 8 java aop spring aspectj spring-aop
我正在研究Spring AOP,我有以下疑问.
据我所知,有两种方法可以将AOP行为实现到Java应用程序中:
AspectJ:这是第一个使用字节码修改进行方面编织的原始AOP技术.
Spring AOP:基于Java的AOP框架,使用AspectJ集成,使用动态代理进行方面编织.
我的疑问是:究竟什么意味着Spring AOP是一个带有AspectJ集成的AOP框架?那么它依次使用AspectJ?或者是什么?
第二个疑问与Spring AOP的Spring配置有关,我知道我可以这样做:
1)使用Java配置类:
@Configuration
@EnableAspectJAutoProxy
@ComponentScan(basePackages=“com.example”)
public class AspectConfig {
...
}
Run Code Online (Sandbox Code Playgroud)
2)使用XML:
<beans>
<aop:aspectj-autoproxy />
<context:component-scan base-package=“com.example” />
</beans>
Run Code Online (Sandbox Code Playgroud)
因此,在两种配置中,Spring AOP似乎都使用AspectJ,因为在这些配置中我有:@EnableAspectJAutoProxy和
它究竟意味着什么?
这可能会回答您的问题-这mvn dependency:tree是使用spring-aop的项目的摘录:
[INFO] | +- org.springframework:spring-aop:jar:3.2.3.RELEASE:compile
[INFO] | | \- aopalliance:aopalliance:jar:1.0:compile
[INFO] | +- org.springframework:spring-aspects:jar:3.2.3.RELEASE:compile
[INFO] | | +- org.aspectj:aspectjweaver:jar:1.7.2:compile
Run Code Online (Sandbox Code Playgroud)
如您所见,Spring依赖关系可传递地包括AspectJ编织器。
话虽如此,文档指出
Spring 2.0引入了一种使用基于模式的方法或@AspectJ批注样式来编写自定义方面的更简单,更强大的方法。这两种样式都提供了完全类型化的建议并使用了AspectJ切入点语言,同时仍然使用Spring AOP进行编织。
干杯,