java,简单实现cglib动态代理。

1 篇文章 0 订阅

Cglib是动态代理的一种实现方式,用来代理普通的javaBean,

/**
 * 实现MethodInterceptor
 * @author MyComputer
 *
 */
public class CGLibProxy   implements MethodInterceptor{
	// Generates dynamic subclasses to enable method interception
	private Enhancer  enhancer = new Enhancer();
	
	/**
	 * this 表示为回调函数,此处为执行代理时候执行的一些操作
	 * @param suoperClass 用户代理的父类
	 * @return 
	 */
	public <T>T getProyInfo(Class<T> suoperClass){
		 
		return (T)enhancer.create(suoperClass,this);
	}
	
	/**
	 * enhancer.create()的返回对象调用方法时候进入的拦截方法,可以执行自己的逻辑
	 */
	@Override
	public Object intercept(Object obj, Method method, Object[] args,
			MethodProxy proxy) throws Throwable {
		 System.err.println("-------调用方法之前---------------");
		 // 调用父类中方法
		 Object invokeSuper = proxy.invokeSuper(obj, args);
		 System.err.println("-------调用方法之后---------------");
		return invokeSuper;
	}

}
public class CGLibTest {

	 public String cgLibTest(String str){
		 System.err.println("-----------------调用反射方法传入的param为:------"+str);
		 return "调用反射方法返回"+str;
	 }
	 
	 /**
	  * 此处用test测试,如果用main方法测试,则回报错误:
	  * java.lang.NoClassDefFoundError: net/sf/cglib/proxy/MethodInterceptor
	  * 这是由于此时没有项目中的jar包没有用maven管理,无法打到依赖项目的目的。
	  */
	 @Test
	 public   void test() {
		CGLibProxy cgLibProxy = new CGLibProxy();
		CGLibTest proyInfo = cgLibProxy.getProyInfo(CGLibTest.class);
		String cgLibTest = proyInfo.cgLibTest("调用反射");
		System.err.println(cgLibTest);	
	}
}

最终输出的结果为:

-------调用方法之前---------------
-----------------调用反射方法传入的param为:------调用反射
-------调用方法之后---------------
调用反射方法返回调用反射
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值