这篇文章主要介绍了java 中动态代理,这里介绍了jdk 动态代理与 cglib 动态代理的相关资料
java 动态代理实例详解
1.jdk动态代理
/**
*
*/
package com.sinosoft;
/**
*接口:编写一个委托类的接口,即静态代理的(apple接口)
*
*/
public interface apple {
public void phonecall();
}
/**
*
*/
package com.sinosoft;
/**
* 实现一个真正的委托类,即静态代理的(appleimpl类)
*
*/
public class appleimpl implements apple {
/*
* 打电话
*/
@override
public void phonecall() {
system.out.println("打电话");
}
}
/**
*
*/
package com.sinosoft;
import java.lang.reflect.invocationhandler;
import java.lang.reflect.method;
/**
* 创建一个动态代理类,实现invocationhandler接口,并重写该invoke方法
*
*/
public class dynamicproxy implements invocationhandler{
private object object;
public dynamicproxy(object object) {
this.object=object;
}
/*
* proxy参数传递的即是代理类的实例。method是调用的方法,即需要执行的方法;args是方法的参数;
* @param proxy
* @param method
* @param args
* @return
* @throws throwable
*/
@override
public object invoke(object proxy, method method, object[] args) throws throwable {
object result = method.invoke(object, args);
return result;
}
}
/**
*
*/
package com.sinosoft;
import java.lang.reflect.proxy;
/**
* @author jdk动态代理
*
*/
public class testdynamicproxy {
public static void main(string[] args) {
//1.创建接口的实现类
apple tapple = new appleimpl();
//2.动态代理类
dynamicproxy tdynamicproxy = new dynamicproxy(tapple);
classloader tclassloader = tapple.getclass().getclassloader();
// 创建动态代理的对象,需要借助proxy.newproxyinstance。该方法的三个参数分别是:
// classloader loader表示当前使用到的appclassloader。
// class<?>[] interfaces表示目标对象实现的一组接口。
// invocationhandler h表示当前的invocationhandler实现实例对象。
apple apple = (apple) proxy.newproxyinstance(tclassloader, new class[] { apple.class }, tdynamicproxy);
apple.phonecall();
}
}
2.cglib动态代理
/**
*
*/
package com.sinosoft;
/**
* 实现一个真正的委托类,即静态代理的(appleimpl类)
*
*/
public class appleclass{
/*
* 打电话
*/
public void phonecall() {
system.out.println("打电话");
}
}
/**
*
*/
package com.sinosoft;
import java.lang.reflect.method;
import net.sf.cglib.proxy.methodinterceptor;
import net.sf.cglib.proxy.methodproxy;
/**
* @author administrator
*
*/
public class cglibproxy implements methodinterceptor{
/*
* 方法功能描述
* @param obj
* @param method
* @param args
* @param proxy
* @return
* @throws throwable
* @see net.sf.cglib.proxy.methodinterceptor#intercept(java.lang.object, java.lang.reflect.method, java.lang.object[], net.sf.cglib.proxy.methodproxy)
*/
@override
public object intercept(object obj, method method, object[] args, methodproxy proxy) throws throwable {
// todo auto-generated method stub
object object= proxy.invokesuper(obj, args);
return object;
}
}
/**
*
*/
package com.sinosoft;
import net.sf.cglib.proxy.enhancer;
/**
* @author administrator
*
*/
public class testcglibproxy {
public static void main(string[] args) {
cglibproxy tcglibproxy=new cglibproxy();
enhancer tenhancer=new enhancer();
tenhancer.setsuperclass(appleclass.class);
tenhancer.setcallback(tcglibproxy);
appleclass tapple= (appleclass)tenhancer.create();
tapple.phonecall();
}
}
【相关推荐】
1. java免费视频教程
2. java实现图片等比例缩略图视频教程
3. 阿里巴巴java开发手册
以上就是关于jdk和cglib的代码详解的详细内容。