切换原因
项目里出现需要调用本类同方法, 出现@CacheAble等缓存注解失效
且spring版本低于4.3(版本存在依赖, 不能轻易更新spring版本呢)以下, 注入自己本身时, 启动会报错
且不想把要调用的方法提取到新的service类中
所以决定将原本的spring
操作步骤
- pom.xml文件引入aspectJ相关包
<properties>
...
<aspectj.version>1.6.9</aspectj.version>
...
</properties>
<dependencies>
...
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
<scope>runtime</scope>
</dependency>
...
</dependencies>
- spring的xml配置增加以下内容
<aop:aspectj-autoproxy proxy-target-class="true" expose-proxy="true"/>
或新建一个xml文件, 取名 spring-aspectj.xml, 并在web.xml中增加这个xml配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<aop:aspectj-autoproxy proxy-target-class="true" expose-proxy="true"/>
</beans>
web.xml修改
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext.xml,
classpath*:spring-aspectj.xml
</param-value>
</context-param>
- 类中引用时, 改为
((当且类名)AopContext.currentProxy()).要调用缓存的方法(...);