Spring学习笔记_AOP的cglib动态代理底层实现方式

单独使用cglib是需要到jar的。
当在spring中使用时cglib的部分随着spring-context.jar的导入已经引用了。
在这里插入图片描述

Target目标对象

package com.cvicse.ump.proxy.jdk.impl;

import com.cvicse.ump.proxy.jdk.TargetInterface;

/**
 * 目标对象
 */
public class Target implements TargetInterface {
    /**
     * 目标方法
     */
    public void save() {
        System.out.println("runing.......");
    }
}

Advice增强对象

package com.cvicse.ump.advice;

/**
 * 增强对象
 */
public class Advice {
    public void before(){
        System.out.println("前置增强.....");
    }
    public void after(){
        System.out.println("后置增强.....");
    }
}

模拟AOP底层的cglib动态代理

package com.cvicse.test;

import com.cvicse.ump.advice.Advice;
import com.cvicse.ump.cglib.impl.Target;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

public class cglibProxyTest {
    public static void main(String[] args) {
        //创建目标对象
        final Target target=new Target();
        //创建增强对象
        final Advice advice = new Advice();
        //生成动态代理对象
        //1.创建增强器
        Enhancer enhancer=new Enhancer();
        //2.设置父类(目标)
        enhancer.setSuperclass(Target.class);
        //3.设置回调(这里需要一个callback的接口对象,一般用它的如下实现类)
        //methodProxy是方法的代理对象,暂时不用管
        enhancer.setCallback(new MethodInterceptor() {
            public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
                //执行前置
                advice.before();
                //执行目标
                Object invoke = method.invoke(target, args);
                //执行后置
                advice.after();
                return invoke;
            }
        });
        //4.创建代理对象
        Target proxy = (Target) enhancer.create();
        //调用代理方法
        proxy.save();
    }
}

这里的写法是耦合死了的,这是因为我们只是模拟,使用AOP的时候代理对象的生成代码是AOP根据配置文件等信息动态生成的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值