AspectJ实现方式(注解方式)

    科技2022-07-11  109

    使用AspectJ框架实现AOP(给一些已经存在的类和方法,增加额外的功能【前提是不改变原来类的代码】)

    实现步骤

    先创建一个maven工程

    加入spring依赖 加入aspectj依赖

    创建目标类:必须有接口和他的实现类(不懂AOP的相关术语可以查看上一篇)

    //接口 public interface SomeService{ void doSome(); } //实现类 @Service //创建对象并放到IOC容器里面,让spring管理 public class SomeServiceImpl implements SomeService{ public void doSome(){ System.out.println("doSome方法执行。"); } } 创建切面类【实则是个普通类】 1)在类上面添加注解 @Aspect 2)在类中定义方法,方法就是切面要执行的功能代码 3)在方法的上面加入aspectj的通知注解,例如@Before 4)指定切入点表达式,例如:execution(public void com.yixuexi.ba01.SomeServiceImpl.doSome(…)) @Aspect public class MyAspect{ @Before("execution(public void com.yixuexi.ba01.SomeServiceImpl.doSome(..))"); public void aspectOne(){ System.out.println("@Before切面方法执行"); } }

    创建spring的配置文件,在文件中声明对象,把对象交给容器统一管理 1)声明对象可以使用xml或者注解的方式都行() 2)声明AspectJ框架中的自动代理生成器标签(自动代理生成器:完成代理对象自动创建功能) <aop:aspectj-autoproxy/> 声明自动代理生成器,使用aspectJ框架内部的功能,创建目标对象的代理对象 创建代理对象是在内存中实现的,修改目标对象的内存中的结构。创建为代理对象 所以目标对象就是被修改后的代理对象 aop:aspectj-autoproxy:会把spring容器中所有的目标对象一次行都生成代理对象 创建测试类,从spring容器中拿到目标对象 通过代理执行方法,实现aop的功能增强这个返回的就不是那个类的对象了,而是他的接口的实现类 发现在没有修改源代码的情况下,就给原服务方法增加的新的功能(这里指那句话),这就是AOP的魅力,直白点就是一个高级点的动态代理

    这样就完成了AspectJ:AOP面向切面编程 先一篇更新:AOP前置/后置/环绕通知注解

    Processed: 0.008, SQL: 8