AspectJ切面:前置通知
2020-06-22 280
AspectJ切面:前置通知,注解的形式
需要jar包
<!-- AspectJ-->
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.14.RELEASE</version>
</dependency>
@Before:前置通知,在方法之前执行,@After/@Around自行百度
定义方法

图1:定义方法
@Component作用:相当于你再ApplicationContext.xml配置<bean id="" class="指向这个方法类名"></bean>
前提是使用Component 要开启bean扫描,一会applicationContext.xml的配置
定义切面

图2:切面
补充说明:请将图1中的@Component注解从图1删除加入到图2,实测,即使都不加也可以,但是不知道是为什么
execution(* com.xx.test.*.*(..))这里的表达式是要test下所有类的所有方法执行之前都会先执行checkToken()里的代码
测试方法

图3:测试方法,忽略applicationContext.xml报的红线!我定义的名字不是这个,是为了让大家明白是哪个配置文件
applicationContext.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.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 自动扫描注解的bean -->
<context:component-scan base-package="com.xx"/>
<!--开启Aspectj的注解,自动代理-->
<aop:aspectj-autoproxy/>
<!--定义切面-->
<bean id="checkToken" class="com.xx.xx.checkToken"/>
</beans>
执行结果

图4:执行结果
补充:若是想要拦截Controller层,则在配置完以上配置之后还需要在Springmvc.xml的配置文件中加入:
<aop:aspectj-autoproxy proxy-target-class="true"/>