Spring-AOP-cglib实现

cglib只能通过类实现代理,不能通过接口正好与java动态代理互补


实例

public class Test {
	//测试手动的cglib动态代理
	@org.junit.Test
	public void testCglibDynamisProxy(){
		Phone phone = CglibDynamisProxy.getInstace().getProxy(MyPhone.class);
		phone.name("苹果");
	}
}

//cglib实现类---通过实现MethodInterceptor接口
public class CglibDynamisProxy implements MethodInterceptor{

	public static CglibDynamisProxy cglibDynamisProxy = new CglibDynamisProxy();
	
	private CglibDynamisProxy() {

	}
	
	public static CglibDynamisProxy getInstace(){
		return cglibDynamisProxy;
	}
	
	/**
	 * 对外提供代理对象的通用方法
	 * Class<T> cla 目标类的子类
	 * @param cla
	 * @return
	 */
	public <T>T getProxy(Class<T> cla){
		//内部有一个增强类Enhancer
		return (T)Enhancer.create(cla, this);
	}
	
	/**
	 * 代表拦截目标类所有的方法
	 */
	@Override
	public Object intercept(Object target, Method method, Object[] arg2, MethodProxy proxy) throws Throwable {
		beforeFun();
		//通过反射调用核心业务方法
		Object result = proxy.invokeSuper(target, arg2);
		afterFun();
		return result;
	}
	
	/**
	 * 手动定义增强方法
	 */
	public void beforeFun(){
		System.out.println("前置代理");
	}
	public void afterFun(){
		System.out.println("后置代理");
	}
}

打印结果

前置代理
手机的名字是苹果
后置代理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值