AOP底层原理

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

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

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

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

 

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


 

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

 

 


 

 

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

AOP底层原理

 

 

 

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

 

编写JDK动态代理演示:

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

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

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

  Class[] interface={UserDao.class}

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

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

AOP底层原理invoke()写增强的逻辑部分

 AOP底层原理

AOP底层原理

 

 AOP底层原理

 

 


 

                   AOP操作术语:

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

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

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

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

          

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

 


 

 

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

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

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

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.*.*(..)) 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

------------恢复内容结束------------

上一篇:面试官:抛开Spring来说,如何自己实现Spring AOP?


下一篇:【242期】面试官:Spring AOP有哪些通知类型,它们的执行顺序是怎样的?