问题
我的印象是Spring AOP最适合用于特定于应用程序的任务,例如安全性,日志记录,事务等,因为它使用自定义Java5注释作为框架。然而,AspectJ似乎是更友好的设计模式明智。
任何人都可以强调在Spring应用程序中使用Spring AOP和AspectJ的各种优缺点吗?
#1 热门回答(191 赞)
Spring-AOP优点
- 它比AspectJ更简单,因为你不必使用LTW(加载时编织)或AspectJ编译器。
- 它使用代理模式和装饰模式
Spring-AOP Cons
- 这是基于代理的AOP,所以基本上你只能使用方法执行连接点。
- 在同一个类中调用另一个方法时不应用方面。
- 可能会有一点运行时开销。
- Spring-AOP不能为Spring工厂创建的任何东西添加方面
AspectJ专业人士
- 这支持所有连接点。这意味着你可以做任何事情。
- 运行时开销比Spring AOP少。
AspectJ Cons
- 小心。检查你的方面是否仅编织到你想要编织的部分。
- 你需要使用AspectJ Compiler进行额外的构建过程,或者必须设置LTW(加载时编织)
#2 热门回答(18 赞)
除了其他人所说的 - 只是改写,there are two major differences
:
- 一个与编织类型有关。
- 另一个连接点定义。
**Spring-AOP:**使用概念dynamic proxy if interface exists or cglib library if direct implementation provided.
编织代理的运行时间
**AspectJ:**编译时编译通过AspectJ Java Tools(ajc compiler)
if源可用或编译后编织(使用编译文件)。此外,可以启用使用Spring编织的加载时间 - 它需要aspectj
definition文件并提供灵活性。
编译时编织可以提供性能(在某些情况下)以及joinpoint definition in Spring-aop is restricted to method definition only which is not the case for AspectJ.
的好处
#3 热门回答(15 赞)
The spring user manual会直接从马的口中提供大量信息。
因为它讨论了两者的优点和缺点,因此第6.4 - Choosing which AOP declaration style to use章对你来说已经没有了。
段落6.1.2 - Spring AOP Capabilites and goals和章节6.2 - @Aspect support和6.8 - Using AspectJ with Spring applications应该特别有趣。