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"/>
4 0