java动态代理
基本概念待续。。。。先看实现代码
package com.devil.practice.proxy;
/**
* 需要被代理的接口
*
* @author devil
*
*/
public interface ObjectInterface {
/**
* 第一个接口
*
* @param index
* 参数
* @return 返回值
*/
public String getName(int index);
}
package com.devil.practice.proxy;
/**
* 被代理对象的具体实现
*
* @author devil
*
*/
public class ObjectImpl implements ObjectInterface {
@Override
public String getName(int index) {
System.out.println("getName:" + index);
String name = null;
switch (index) {
case 1:
name = "index1";
break;
case 2:
name = "index2";
break;
case 3:
name = "index3";
break;
default:
name = "indexnull";
break;
}
return name;
}
}
package com.devil.practice.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* 代理类的实现
*
* @author devil
*
*/
public class ProxyHander implements InvocationHandler {
private Object proxyObject;
public ProxyHander(Object proxyObject) {
super();
this.proxyObject = proxyObject;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 调用之前可以做其他的一些处理,比如对参数的重新封装
System.out.println("调用之前可以做其他的一些处理,比如对参数的重新封装。。。。。。");
// -----------------------------------------------
Object result = method.invoke(proxyObject, args);
// -----------------------------------------------
// 调用结束后做一些其他的处理。比如对返回结果的处理
System.out.println("调用结束后做一些其他的处理。比如对返回结果的处理。。。。。。");
// 返回处理的结果
return result;
}
}
package com.devil.practice.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
/**
* 代理生成工厂
*
* @author devil
*
*/
public abstract class ProxyBuildFactory {
public static ObjectInterface buildObject(ObjectInterface temp) {
// 处理器生成
InvocationHandler handler = new ProxyHander(temp);
// 获取代理对象的
ObjectInterface object = (ObjectInterface) Proxy.newProxyInstance(temp.getClass().getClassLoader(), temp
.getClass().getInterfaces(), handler);
return object;
}
}
package com.devil.practice.proxy;
/**
* 测试代码
*
* @author devil
*
*/
public class ProxyMain {
public static void main(String[] args) {
System.out.println("。。。。。。。。。。。原是的调用方式。。。。。。。。。。。。");
ObjectInterface inter = new ObjectImpl();
System.out.println(inter.getName(2));
System.out.println("。。。。。。。。。。。原是的调用方式。。。。。。。。。。。。");
System.out.println("----------------------------------------------------");
System.out.println("。。。。。。。。。。。添加代理后的调用方式。。。。。。。。。。。。");
ObjectInterface inter2 = ProxyBuildFactory.buildObject(new ObjectImpl());
System.out.println(inter2.getName(2));
System.out.println("。。。。。。。。。。。添加代理后的调用方式。。。。。。。。。。。。");
}
}
输出:
。。。。。。。。。。。原是的调用方式。。。。。。。。。。。。
getName:2
index2
。。。。。。。。。。。原是的调用方式。。。。。。。。。。。。
----------------------------------------------------
。。。。。。。。。。。添加代理后的调用方式。。。。。。。。。。。。
调用之前可以做其他的一些处理,比如对参数的重新封装。。。。。。
getName:2
调用结束后做一些其他的处理。比如对返回结果的处理。。。。。。
index2
。。。。。。。。。。。添加代理后的调用方式。。。。。。。。。。。。