AOP底层原理

------------恢复内容开始------------

不通过修改源代码方式增加新功能

1.AOP底层使用动态代理:他有两种情况动态代理

    a:有接口情况,使用JDK动态代理

    b:没有接口情况,使用CGLIB动态代理

 

a:有接口情况,使用JDK动态代理:他的方法是,在有接口和接口实现类的情况下,如果想要增强接口实现类里的功能,那么就创建接口实现类代理对象,通过代理对象来增强类里的方法功能


 

b:没有接口情况,使用CGLIB动态代理:只是基本的类和方法,使用CGLIB动态代理,创建当前类子类的代理对象

 

 


 

 

AOP(JDK动态代理):使用JDK动态代理,使用Proxy类里面的方法创建出代理对象

 

 

 

调用newProxyInstance()方法,方法有三个参数分别是(类加载器、增强方法所在类,这个类实现的接口,支持多个接口、实现这个接口InvocationHandle,创建代理对象,写增强的方法)

 

编写JDK动态代理演示:

(1)第一步创建接口(UserDao),并写上定义若干方法;

(2)创建接口实现类(UserDaoImpl),实现方法

(3)创建类(JDKProxy),并使用引用Proxy类创建接口代理对象

  Class[] interface={UserDao.class}

  使用Proxy.newProxyInstance(JDKProxy.class.getClassLoader(),interface,new InvocationHandle())

或者最后一个参数不用匿名对象,而是单独写一个类来实现这个接口InvocationHandle

invoke()写增强的逻辑部分

 

 

 

 

 


 

                   AOP操作术语:

    1.连接点:类里面哪些方法可以被增强,这些方法称为连接点

    2.切入点:实际被增强的方法是切入点:

    3.通知(增强):实际增强的逻辑部分称为通知;

            通知有多种类型:前置通知、后置通知、环绕通知、异常通知、最终通知

          

    4.切面:是动作,把通知应用到切入点的过程

 


 

 

    AOP操作准备:Spring框架一般基于AspectJ实现AOP操作,

       实现方式:基于XML配置文件实现、基于注解方式实现(常用)

在项目工程引入AOP相关依赖,

 

 

     切入点表达式:知道哪个类里面的哪个方法增强

  语法结构:execution([权限修饰符][返回类型][类全路径][方法名称]([参数列表]))

举例1:对com.atguigu.dao包中BookDao类里的add方法进行增强,

  execution(*  com.atguigu.dao.BookDao.add(..))  //用*表示任意修饰符都可以,..表示参数

 

举例2:对com.atguigu.dao包中BookDao类里的所有方法进行增强,

    execution(*  com.atguigu.dao.BookDao.*(..))    //这里*表示所有方法

 

举例3:对com.atguigu.dao包中所有类,类中所有方法进行增强,

     execution(*  com.atguigu.dao.*.*(..)) 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @   饿了快点吃  阅读(392)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示