关于Spring AOP示例的一些疑问

时间:2013-02-16 10:00:18

标签: java spring maven spring-mvc cglib

我在Spring Framework中学习AOP,学习本教程:http://www.tutorialspoint.com/spring/schema_based_aop_appoach.htm

与上一个教程不同,我不是手动添加所需的jar文件,而是使用Maven。

最初我在pom.xml中添加了这个依赖项(除了那些与spring-core,spring-bean,spring-context,spring-context-support Spring模块相关的依赖项)

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>3.1.1.RELEASE</version>
    </dependency>

但是,通过这种方式不起作用并引发了以下异常:

引起:java.lang.ClassNotFoundException:org.aspectj.weaver.reflect.ReflectionWorld $ ReflectionWorldException

在线阅读我找到了解决方案:我必须在我的pom.xml中添加这两个依赖项:

    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjtools</artifactId>
        <version>1.6.2</version>
    </dependency>

    <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib</artifactId>
        <version>2.2</version>
    </dependency>

所以现在我有两个疑问:

  1. 如果我还没有 org.springframework.spring-aop ,为什么我必须添加 org.aspectj.aspectjtools 依赖项? (还有......我注意到我可以删除org.springframework.spring-aop,这是不用的) 他们之间有什么区别?

  2. 为什么我必须添加 cglib 依赖? 我知道当我使用像@Configuration和@Bean这样的注释时我必须使用cglib ...但是为什么我需要这种没有这些注释的依赖项?

  3. TNX 安德烈

1 个答案:

答案 0 :(得分:0)

您可以在pom.xml中使用aopalliance而不是cglib和aspectjrt & aspectjweaver依赖项。我使用和建议的是使用Maven aspectj-maven-plugin编译团队编织目标代码。

关于您的问题,Spring AOP本身并不会检测您的目标代码。它在幕后使用AspectJ来做到这一点。 CGLib用于生成动态代理等。如果您需要动态生成界面然后将其应用到您的建议,那么CGLib可以提供帮助。 Hibernate大量使用CGLib