JDK动态代理和cglib动态代理
JDK动态代理和cglib动态代理
JDK动态代理1、目标对象必须实现接口
2、利用jdk的api,动态的在内存中构建代理对象
、JDK代理也叫接口代理代码语言:javascript代码运行次数:0运行复制//目标接口
public interface ITeach {
void study();
}
//目标类
public class Teach implements ITeac
JDK动态代理和cglib动态代理
JDK动态代理
1、目标对象必须实现接口 2、利用jdk的api,动态的在内存中构建代理对象 、JDK代理也叫接口代理
代码语言:javascript代码运行次数:0运行复制//目标接口
public interface ITeach {
void study();
}
//目标类
public class Teach implements ITeach {
@Override
public void study() {
println("老师正在学习");
}
}
//代理类
public class DynamicProxy {
//目标对象
private Object target;
public DynamicProxy(Object target) {
= target;
}
//为目标对象生产代理对象
public Object getProxyInstance(){
/**
* 1.指定当前目标对象使用的类加载器
* 2.目标对象实现的接口类型
* .事情处理,执行目标对象方法时,会触发事情处理器方法(会把当前执行的目标对象方法作为参数传入)
*/
return (getClassLoader(), target.getClass().getInterfaces(), (proxy, method, args) -> {
println("JDK动态代理开始");
Object result = method.invoke(target, args);
println("JDK动态代理结束");
return result;
});
};
}
public class Client {
public static void main(String[] args) {
ITeach teach = new Teach();
DynamicProxy proxy = new DynamicProxy(teach);
ITeach obj = (ITeach) proxy.getProxyInstance();
obj.study();
}
}
结果:
JDK动态代理开始
老师正在学习
JDK动态代理结束
ps:如果在Teach中添加方法,而ITeach中没有。生成代理对象强转为Teach就会报错。 故:代理只能代理接口中的方法,所以又叫接口代理。
cglib代理
1、目标对象可以不用实现接口 目标接口和目标类还是ITeach和Teach
代码语言:javascript代码运行次数:0运行复制public class CglibProxy implements MethodInterceptor {
//目标对象
private Object target;
public CglibProxy(Object target) {
= target;
}
//为目标对象生产代理对象
public Object getProxyInstance(){
//创建一个工具
Enhancer enhancer = new Enhancer();
//设置父类
enhancer.setSuperclass(target.getClass());
//设置回调函数
enhancer.setCallback(this);
//创建代理对象
return ();
}
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
println("Cglib动态代理开始");
Object result = method.invoke(target, objects);
println("Cglib动态代理结束");
return result;
}
}
public class Client {
public static void main(String[] args) {
ITeach teach = new Teach();
CglibProxy proxy = new CglibProxy(teach);
Teach obj = (Teach) proxy.getProxyInstance();
obj.study();
}
}
结果:
Cglib动态代理开始
老师正在学习
Cglib动态代理结束
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-01-20,如有侵权请联系 cloudcommunity@tencent 删除接口jdk代理动态代理对象 #感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上传时间: 2025-07-20 21:10:47
上一篇:IOC和AOP理解
推荐阅读
留言与评论(共有 5 条评论) |
本站网友 镜像浏览器 | 3分钟前 发表 |
method | |
本站网友 青岛二手房信息 | 17分钟前 发表 |
原始发表:2025-01-20 | |
本站网友 西安医学高等专科学校 | 3分钟前 发表 |
而ITeach中没有 | |
本站网友 单核细胞 | 30分钟前 发表 |
method |