今天重温了下有关JDK动态代理的知识,简单的用一个比较小的例子总结一下,通过这个例子,也能粗略的对JDK动态代理有个清晰的认识,下面来看一下:1.首先建立一个接口,还有它的实现类(来代表委托类)
public interface DemoM {
public int Test(String s);
}
public class Demo implements DemoM{
@Override
public int Test(String s) {
System.out.println("这是一个方法"+s);
return 1;
}
}
2.再模拟建一个表示事物的类(演示在方法上添加事物)
package reflect;
public class Trans {
public void start(){
System.out.println("开始");
}
public void commit(){
System.out.println("提交");
}
public void rollback(){
System.out.println("回滚");
}
}
3.建立我们的代理工厂
public class ProxyFactory implements InvocationHandler{
private Object object;
//模拟实物对象
private Trans tx = new Trans();
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
try {
tx.start();
Object result = method.invoke(object,args);
tx.commit();
return result;
} catch (Exception e) {
tx.rollback();
return null;
}
}
//利用构造方法建立相应的代理对象
public ProxyFactory(Object obj){
this.object = obj;
}
}
4.最后一步是我们的测试类
public class Test {
public static void main(String[] args) {
//创建对象
DemoM d = new Demo();
//这里来测试,通过工具类创建对象
Class<?>[] demoInter = Demo.class.getInterfaces();
ClassLoader classLoader = Demo.class.getClassLoader();
InvocationHandler handler = new ProxyFactory (d);
//创建代理对象
DemoM dNew = (DemoM) Proxy.newProxyInstance(classLoader, demoInter, handler);
int result = dNew.Test("hh");
System.out.println(result);
}
}
5.结果显示在控制台