【问题标题】:Spring AOP use AspectJ to works or what?Spring AOP 使用 AspectJ 来工作还是什么?
【发布时间】:2015-08-17 15:34:28
【问题描述】:

我在学习Spring AOP,有以下疑惑。

据我所知,有两种方法可以将 AOP 行为实现到 Java 应用程序中:

  1. AspectJ:这是第一个使用字节码修改进行切面编织的原始 AOP 技术。

  2. Spring AOP:基于 Java 的 AOP 框架与 AspectJ 集成,使用动态代理进行方面编织。

我的疑问是:Spring AOP 是一个与 AspectJ 集成的 AOP 框架究竟意味着什么?所以它反过来使用AspectJ?还是什么?

第二个疑问与Spring AOP的Spring配置有关,我知道可以这样:

1) 使用Java配置类:

@Configuration
@EnableAspectJAutoProxy
@ComponentScan(basePackages=“com.example”)
public class AspectConfig {
    ...
}

2) 使用 XML:

<beans>
    <aop:aspectj-autoproxy />
    <context:component-scan base-package=“com.example” />
</beans>

所以,在这两种配置中,似乎 Spring AOP 都使用 AspectJ 因为在这些配置中我有:@EnableAspectJAutoProxy

具体是什么意思?

【问题讨论】:

    标签: java spring aop aspectj spring-aop


    【解决方案1】:

    这可能会回答您的问题 - 这是使用 spring-aop 的项目的 mvn dependency:tree 的摘录:

    [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
    

    如您所见,Spring 依赖项可传递地包括 AspectJ 编织器。

    话虽如此,documentation 声明

    Spring 2.0 引入了一种更简单、更强大的方式来使用基于模式的方法或 @AspectJ 注释样式来编写自定义方面。这两种风格都提供完全类型化的建议和使用 AspectJ 切入点语言,同时仍然使用 Spring AOP 进行编织。

    干杯,

    【讨论】:

    • 请注意,从 spring-aop 3.3.0 开始,spring-aop 工件不再依赖 aopalliance:aopalliance:1.0,而是直接捆绑(可能已修改)org.aopalliance 类。当与使用 aopalliance 的其他库(尤其是 com.google.inject:guice)结合时,这将导致类路径上出现多个版本的 org.aopalliance 类。
    【解决方案2】:

    一开始(直到 1.2 版本),Spring 使用 AOP Alliance 作为框架来提供 AOP 支持。 然后,Spring 改变并开始使用 AspectJ。

    AspectJ 和 Spring AOP 的主要区别在于,首先,Spring AOP 提供了 AspectJ 提供的功能的子集,此外,Spring AOP 使用动态代理作为实现它的策略,而 AspectJ 增强了编译类的字节码,使用他们特定的编译器(您需要运行后编译过程以准备好您的编译类)。

    换句话说,Spring AOP 在幕后使用 AspectJ 引擎来提供 AOP,这让您能够以更简单的方式使用该强大框架的强大功能。 但要注意 Spring AOP 并不提供所有 AspectJ 功能

    查看this post 了解更多信息

    【讨论】:

      猜你喜欢
      • 2015-12-17
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多