18.1新建一个Demo2的接口;
package com.eduask.entity4;
//定义Demo2的接口;
public interface Demo2 {
void id();
void name();
void pwd();
}
18.2新建一个Demo2Impl类实现Demo2的接口;
package com.eduask.entity4;
//定义一个Demo2Impl的实现Demo2接口;
public class Demo2Impl implements Demo2 {
@Override
public void id() {
System.out.println("Demo2 id");
}
@Override
public void name() {
System.out.println("Demo2 name");
}
@Override
public void pwd() {
System.out.println("Demo2 pwd");
}
}
18.3 新建一个代理LogDynamicProxy类;
package com.eduask.entity4;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class LogDynamicProxy implements InvocationHandler {
private Object targer;//定义一个代理对象;
//设置代理方法,并设置对象值;
public static Object getDynamicProxy(Object obj){
LogDynamicProxy proxy=new LogDynamicProxy();
proxy.targer=obj;
//返回新生成实例化; 参数1 对象加载 参数2 对象接口 参数3 对象;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(), proxy);
}
//重写invoke方法;
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
//输出获得方法的名字;
System.out.println("你执行了"+method.getName()+"的方法");
//获得方法的执行;
Object obj=method.invoke(targer, args);
return obj;
}
}
18.4 新建一个TestDemo2
package com.eduask.entity4;
//使用动态代理测试;
public class TestDemo2 {
public static void main(String[] args) {
Demo2 d2=new Demo2Impl();
Demo2 proxy=(Demo2) LogDynamicProxy.getDynamicProxy(d2);
proxy.id();
proxy.name();
proxy.pwd();
}
}
18.5 程序运行如下:
你执行了id的方法
Demo2 id
你执行了name的方法
Demo2 name
你执行了pwd的方法
Demo2 pwd
代理接口
原创
©著作权归作者所有:来自51CTO博客作者wx62e9cee37942d的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Cglib动态代理
cglib动态代理
cglib动态代理 -
代理模式-动态代理(基于接口,JDK动态代理)
动态代理静态代理动态代理特点静态代理这里我们介绍了静态代理,也知道了静态代理的一些缺点代理模式-静态代理下面我们就介绍动态代理动态代理特点
代理 静态代理 动态代理 JDK动态代理 基于接口 -
java动态代理--代理接口无实现类
[java] view plain copypackage cn.proxy;
java反射 java System 方法调用 -
接口代理方式实现Dao层
对角化和A的幂
sql 类对象 配置文件 xml 动态代理 -
没有接口实现类代理
问题的提出正常的jdk动态代理和cglib代理都是通过传入实体类
java jdk动态代理 ide