- 一,AOP的概念
- 二,AOP的底层原理
- 1,AOP底层使用动态代理
- 三,AOP的术语:
- 四,实现AOP操作前的准备工作
- 五,AOP操作
- 六,增强类优先级的设置
- 七,完全使用注解开发
Aop的作用:
- 面向切面编程,利用Aop可以对业务逻辑的各个方面进行隔离,通俗点就是当你想对原方法内的内容做一些补充,可以不必在原方法的代码做修改(大大降低了代码的耦合度,提高了程序的可重用性,提高了代码的编写效率)
第一种: 有接口情况,使用 JDK 动态代理
用Proxy类中的这个静态构造方法
创建指定接口的代理类的实例(这里的代理类其实就是实现这个接口的类)
下面是所有代码:
所以method可以直接调用invoke()方法去执行已被UserDaoImpl实现类继承后并增强了(方法体中添加了一些功能)的UserDao接口中的add()方法
第二种:没有接口情况,使用 CGLIB 动态代理
其实类似于子类继承并重写父类方法的过程,具体参考java基础中子类继承父类方法并重写的代码
- 注意:图中 … 代表方法中的参数,写代码时可以直接这样写
- 注意:切入点表达式中权限修饰符可以省略
- 图中的*号表示任意返回类型,就是可以表示任意返回类型
- 图中方法名改为了*表示对类中所有方法进行加强
创建一个spring文件并对其做出以下配置
在User类和UserProxy类中均使用注解 @Component 创建对象默认对象的名字为类的首字母小写
在增强类中添加注解 @Aspect 生成代理对象
然后在Spring配置文件中开启生成代理对象
有5中类型的通知:
分别是:
重点: 相同切入点抽取
所有通知的value值都可以写切入点中的方法名称(pointdemo方法),就可以对切入点路径中的add()方法进行"增强"
- 作用:
我认为这种相同切入点的作用是减少修改次数
比如:你要修改运行别的包下类的增强方法,然后你写了"execution(* com.Spring.test.aopanno.User.add(…))"1000次
这样修改量太大了,但如果你用这种相同切入点的方法只需修改切入点中的方法路径即可
和之前的注解一样均写在类的上方
创建配置类,不用xml配置文件
注意:本文大量引用了尚硅谷Spring5课程讲义中的笔记。



