我在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>
所以现在我有两个疑问:
如果我还没有 org.springframework.spring-aop ,为什么我必须添加 org.aspectj.aspectjtools 依赖项? (还有......我注意到我可以删除org.springframework.spring-aop,这是不用的) 他们之间有什么区别?
为什么我必须添加 cglib 依赖? 我知道当我使用像@Configuration和@Bean这样的注释时我必须使用cglib ...但是为什么我需要这种没有这些注释的依赖项?
TNX 安德烈
答案 0 :(得分:0)
您可以在pom.xml中使用aopalliance
而不是cglib和aspectjrt & aspectjweaver
依赖项。我使用和建议的是使用Maven aspectj-maven-plugin编译团队编织目标代码。
关于您的问题,Spring AOP本身并不会检测您的目标代码。它在幕后使用AspectJ来做到这一点。 CGLib用于生成动态代理等。如果您需要动态生成界面然后将其应用到您的建议,那么CGLib可以提供帮助。 Hibernate大量使用CGLib