转载请注明出处:http://blog.csdn.net/droyon/article/details/8607776
java反射动态代理,学习例子
package test;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class DynamicProxyTest {
public static void main(String args[]){
// 动态代理内部过程
// Class c = Proxy.getProxyClass(DynamicInterface.class.getClassLoader(), DynamicInterface.class);
//
// try {
// Constructor constructor = c.getConstructor(InvocationHandler.class);
// System.out.println(constructor.getName()+"------"+constructor.getClass());
//
//
//
// try {
// Object o = constructor.newInstance(new InvocationTest(new DynamicObject()));
// ((DynamicInterface)o).doSomeThing();
// } catch (IllegalArgumentException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (InstantiationException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (IllegalAccessException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (InvocationTargetException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// } catch (SecurityException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (NoSuchMethodException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// System.out.println(c.getName());
// System.out.println(c.getPackage().getName());
DynamicInterface dd = (DynamicInterface) Proxy.newProxyInstance(DynamicInterface.class.getClassLoader(), new Class[]{DynamicInterface.class}, new InvocationTest(new DynamicObject()));
dd.doSomeThing();
}
}
interface DynamicInterface{
void doSomeThing();
void print();
}
class DynamicObject implements DynamicInterface{
@Override
public void doSomeThing() {
System.out.println("11111111111");
}
@Override
public void print() {
System.out.println("22222222222222");
}
}
class InvocationTest implements InvocationHandler{
Object dynamicO;
public InvocationTest(Object obj){
dynamicO = obj;
}
@Override
public Object invoke(Object obj, Method method, Object[] objs)
throws Throwable {
System.out.println(method.getName()+"0-----"+obj.getClass().getName());
if(objs!=null){
for(Object o:objs){
System.out.println(o);
}
}
return method.invoke(dynamicO, objs);
}
}
//动态代理 弹性框架例子
DynaProxyJava.java
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class DynaProxyJava {
public static void main(String args[]){
DynamicInterface dynamicInterface = (DynamicInterface) (new DynamicProxyHandler(new Client()).newFromInterface());
String result = dynamicInterface.doPrint();
System.out.println("result is:"+result);
}
}
interface DynamicInterface{
String doPrint();
}
class Client implements DynamicInterface{
@Override
public String doPrint() {
return "11111111111111";
}
}
class DynamicProxyHandler implements InvocationHandler{
private Object mOject;
public DynamicProxyHandler(Object object){
mOject = object;
}
public Object newFromInterface(){
return Proxy.newProxyInstance(mOject.getClass().getClassLoader(),
mOject.getClass().getInterfaces(),this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object obj = null;
obj = method.invoke(mOject, args);
return obj;
}
}