Spring基础----AOP(1),JDK/CGLIB动态代理

本文介绍了Spring的面向切面编程(AOP),旨在解决代码中重复的初始化和销毁逻辑。文章详细阐述了AOP的概念,包括切面、切入点和代理拦截器,并通过对比分析了JDK动态代理和CGLIB代理的原理及应用场景。通过实例展示了如何使用JDK和CGLIB实现动态代理拦截器,以达到代码增强和功能添加的目的。
摘要由CSDN通过智能技术生成

Spring AOP(面向切面编程)

根据个人理解,AOP就是对指定的目标方法绑定各种拦截程序
如:A框架代码是所有程序必须的 , B程序想运行,运行前A框架初始化代码必须先运行 , B程序运行完后还需要执行A框架销毁代码;
如果有100个程序呢 , 那每个程序都需要写入A 框架的初始化和销毁程序 , 这显然不明智
AOP出现就解决了这个问题
如下图所示,
切面: 对目标类进行拦截后运行的程序
目标类的目标方法 : 切入点, 被切面拦截的程序
代理拦截器 : 将所有的切面和目标类引入 (所以的东西代理进来),通过构造器赋值,填充代理方法 ,
最后目标类可以通过代理拦截器产生具有切面拦截的代理对象!!!

在这里插入图片描述


实现代理拦截器

JDK 代理 或者CGLIB代理 动态代理实现代理拦截器
一、原理区别:

java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。

而cglib动态代理是利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。

1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP
2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP

3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换

4、jdk代理 : 代理对象和目标对象实现了共同的接口
cglib代理 : 代理对象是目标对象的子类

JDK代理 - 实现动态代理拦截器

目标类

public class SalaryMainImp implements SalaryMain {
   
    @Override
    public void showSalary() {
   
        System.out.println("查看工资");
    }
}

切面拦截类

//切面
public class Logger {
   
    public void logger(){
   
        System.out.println("启动日志~~~~~");
    }
}

***************************************************

//切面
public class Security {
   
    public void security() {
   

        System.out.println("启动安全框架~~~~~");
    }
}

代理拦截器

/*  代理拦截器  实现 InvocationHandler
 * 将所有的切面和目标类引入 (所以的东西代理进来)
 * 通过构造器赋值
 * 填充invoke方法
 *
 * */
public class SalaryInterceptor implements InvocationHandler {
   

    private Object target;  //目标类
    
    private Logger logger;  //日志类切面
    private Security security; //安全框架类切面

    public SalaryInterceptor(Object target, Logger logger, Security security, Privilege privilege) {
   
        this.target = target;
        this.logger = logger;
        this
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值