之前的項(xiàng)目一直使用的是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>
```
第一次踩坑就出現(xiàn)在 maven 引入jar 包的時候。當(dāng)我寫好pom文件,啟動項(xiàng)目
不出意外 報錯了
```
報錯error at ::0 can't find referenced pointcut
```
翻看資料發(fā)現(xiàn)是 aspectj jar包低版本會造成這種原因,開始我引入的是1.5的版本,但是升到1.8以后還是同樣的問題。
于是查看maven依賴,好吧,這兩個jar包沒有下載成功。于是在maven 鏡像倉庫 下載jar包后,解決問題。
這次順利的啟動,但是進(jìn)行請求調(diào)用的時候,aop 卻并沒有觸發(fā)。
```
@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;
```
又一次陷入只是盲區(qū)。查看相關(guān)的配置文件。發(fā)現(xiàn)原來aop的配置文件沒有寫對位置,導(dǎo)致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 標(biāo)記 -->
<aop:aspectj-autoproxy proxy-target-class="true"/>
```
重啟項(xiàng)目,進(jìn)行訪問,成功進(jìn)入aop 處理邏輯。