要使用Spring框架AOP,除了要导入spring框架包外,还需要导入一个织入的包org.aspectj,具体maven依赖如下:本文地址:http://47.93.183.36/article/876.html,未经许可,不得转载.
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.9</version>
</dependency>本文地址:http://47.93.183.36/article/876.html,未经许可,不得转载.
然后我们编写几个类,一个是接口类ArticleInterface,二是这个接口的实现类Article,三是需要往这个实现类Article中切入的切面类:BeforeLog 和AfterLog 分别在方法执行起和末尾执行的方法。类的实现代码如下:本文地址:http://47.93.183.36/article/876.html,未经许可,不得转载.
//接口类ArticleInterface package proxy; public interface ArticleInterface { public void query(); public void add() ; public void edit() ; public void delete() ; } //接口的实现类Article package proxy; public class Article implements ArticleInterface{ public void query() { System.out.println("获取了一篇文章"); } public void add() { System.out.println("添加了一篇文章"); } public void edit() { System.out.println("修改了一篇文章"); } public void delete() { System.out.println("删除了一篇文章"); } } //前置切面类 package proxy; import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAdvice; public class BeforeLog implements MethodBeforeAdvice{ //Method 目标对象的方法;Object:目标对象;target:目标对象 public void before(Method method, Object[] args, Object target) throws Throwable { // TODO Auto-generated method stub //此方法内容在目标方法执行前会自动执行 System.out.println("开始执行方法:" + target.getClass().getName() + "." + method.getName()); } } //后置切面类 package proxy; import java.lang.reflect.Method; import org.springframework.aop.AfterReturningAdvice; public class AfterLog implements AfterReturningAdvice{ public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable { // TODO Auto-generated method stub System.out.println("执行方法完成:" + target.getClass().getName() + "." + method.getName() ); } }本文地址:http://47.93.183.36/article/876.html,未经许可,不得转载.
注意,前置切面类和后置切面类分别实现了MethodBeforeAdvice和AfterReturningAdvice接口,也正因此他们能切入方法进行执行。至于切入至哪个目标类的哪个方法执行,需要我们进入applicationContext.xml中进行aop配置。如上我们需要将这两个切面类BeforeLog和AfterLog加至Article执行。applicationContext.xml的配置及运行结果如下:本文地址:http://47.93.183.36/article/876.html,未经许可,不得转载.
<?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 https://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- 上方导入aop约束 --> <aop:aspectj-autoproxy /> <bean id="article" class="proxy.Article" /> <bean id="beforelog" class="proxy.BeforeLog" /> <bean id="afterlog" class="proxy.AfterLog" /> <!-- 进行aop配置 --> <aop:config> <!-- 表示:Article.*(..) Article类的所有方法任意参数 --> <aop:pointcut expression="execution(* proxy.Article.*(..))" id="logcut"/> <aop:advisor advice-ref="beforelog" pointcut-ref="logcut"/> <aop:advisor advice-ref="afterlog" pointcut-ref="logcut"/> </aop:config> </beans> //运行结果如下: 开始执行方法:proxy.Article.add 添加了一篇文章 执行方法完成:proxy.Article.add本文地址:http://47.93.183.36/article/876.html,未经许可,不得转载.
本文地址:http://47.93.183.36/article/876.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
手机扫码直接打开本页面 |