Spring AOP的简单项目搭建及简单理解
第一个纯手AOP项目 记录下 遇到的报错 及解决方案(慢慢整理版)
1.Spring 报错
Cannot resolve plugin org.apache.maven.plugins:maven-clean-plugin:2.5
直接运行不是本地源码时出现 原因是maven 配置出错 在project setting 中修改
2. Spring 报错
Unmapped Spring configuration files found
之前在项目搭建了xml配置但是没有交给spring管理 解决方案是在Project structure 中建立module 把unmapped的文件都给spring管理
3.aop 配置
3.1 aop配置
在pom.xml中配置依赖时应注意 除了配置spring-aop外,还需要配置动态和静态代理两种包(因为springAop本质是对这三种方法进行封装)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.13.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.9</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
<!-- http://mvnrepository.com/artifact/cglib/cglib -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.2.2</version>
</dependency>
使用xml配置项目时开启aop自动代理
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
4.aop使用
简单来说 aop的使用就是 首先用一个接口定义非核心方法 再由一个或多个类实现这些非核心方法 之后再建一个aspect类(切面)来管理aop的增强业务
首先在aopproxy的头部声明自己是切面@Aspect
然后将需要切入的对象注入到aopproxy
例如private UserCache userCache;
接着声明切点
这个项目中我使用基于注解的切入方式
即@After@Before@AfterThrowing@Around@AfterRetrunning
这里我采用直接在注解处声明切点的方式,即
@After("excecution()")
注意*不能和后面的地址连在一起其中"excecution()"的*表示所有都控制;
也可以在前面用@Poincut声明切点 后面再在After直接调用切点例如
private final String POINT_CUT = "execution(* com..service.*.*(..))";
@Pointcut(POINT_CUT)
public void pointCut(){}
@After(value="pointCut()")
在AOP中获取参数和进行拦截
参考链接https://blog.csdn.net/qq_15037231/article/details/80624064
断言assert的使用
例如
assert(userServiceI.login("",""));
如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句