之前的项目一直使用的是springboot框架,aop 直接引入jar包就能正常使用,免去了繁琐的配置过程。这次用回springmvc第一次自己动手集成springmvc 的spring-aop 。踩了不少坑 .首先spring-aop 所依赖的三个jar包
```
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.9</version>
</dependency>
```
第一次踩坑就出现在 maven 引入jar 包的时候。当我写好pom文件,启动项目
不出意外 报错了
```
报错error at ::0 can't find referenced pointcut
```
翻看资料发现是 aspectj jar包低版本会造成这种原因,开始我引入的是1.5的版本,但是升到1.8以后还是同样的问题。
于是查看maven依赖,好吧,这两个jar包没有下载成功。于是在maven 镜像仓库 下载jar包后,解决问题。
这次顺利的启动,但是进行请求调用的时候,aop 却并没有触发。
```
@Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping)")
public void pointcut(){};
@Around("pointcut()")
public Object interceptor(ProceedingJoinPoint pjp) throws Throwable{
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String params = getParamValue(request);
logger.info("====================="+ params);
Object obj = pjp.proceed();
logger.info("====================="+ obj);
// response.setContentType("text/html;charset=UTF-8");
// response.getOutputStream().write("测试".getBytes());
return obj;
```
又一次陷入只是盲区。查看相关的配置文件。发现原来aop的配置文件没有写对位置,导致aop没有加载上。
正确的加载位置是在webapp 下的web.xml中的classpath:的位置。
```
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/servlet-*.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
```
于是找到这个配置文件 加入
```
<!-- 支持 @AspectJ 标记 -->
<aop:aspectj-autoproxy proxy-target-class="true"/>
```
重启项目,进行访问,成功进入aop 处理逻辑。