代理接口
2016-08-26 16:33
281 查看
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
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
相关文章推荐
- 面向自然语言的用户接口智能代理系统软件
- 解决异地服务器接口访问跨域,node构建反向代理
- JavaSE-接口之静态代理模式
- 黑马程序员- 动态代理 ,接口 ,抽象类
- JDK的动态代理为什么要实现所有的接口?
- MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring
- 通过代理接口在内存中动态生成代理类源代码并编译实现的真正动态代理
- java反射和动态代理实现接口记录
- Spring AOP-有接口的CGLIB动态代理
- Vue2+VueRouter2+Webpack+Axios 构建项目实战(六)将接口用 webpack 代理到本地
- CGLIB无接口动态代理
- jdk动态代理接口
- 动态代理 ,接口 ,抽象类
- 多线程-静态代理的方式 - 实现Runnable接口
- Java 接口作用之--代理设计模式
- Java的代理模式(通过公共接口实现)
- Android 反射、代理调用系统隐藏API方法与接口类连接Wi-Fi
- java动态代理--代理接口无实现类
- JDK动态代理源码及源码剖析之为什么只能代理接口