1.静态代理
接口或抽象类:
package com.bian.jdom.asyn;
public interface HelloWord {
public void sayHello();
}
被代理的类:
package com.bian.jdom.asyn;
public class HelloWordImpl implements HelloWord {
public HelloWordImpl(){
}
public void sayHello() {
// TODO Auto-generated method stub
System.out.println("Hello word ! ");
}
}
静态代理类:
package com.bian.jdom.asyn;
public class StaticProxy implements HelloWord {
HelloWord helloword = null;
public StaticProxy(HelloWord helloword){
this.helloword = helloword;
}
public void sayHello() {
// TODO Auto-generated method stub
System.out.println("调用之前处理一些事物");
this.helloword.sayHello();
System.out.println("调用之后处理一些事物");
}
}
测试类:
package com.bian.jdom.asyn;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
StaticProxy staticProxy = new StaticProxy(new HelloWordImpl());
staticProxy.sayHello();
}
}
说明:静态代理方式在新增一个方法的时候会同时修改
接口类 被代理的类 静态代理类。
代码量比较大,不够灵活,容易出错。
2.动态代理
接口类:
package com.bian.jdom.asyn;
import java.util.List;
public interface HelloWord {
public void sayHello();
public void sayName(String name);
public List getList();
}
被代理类:
package com.bian.jdom.asyn;
import java.util.ArrayList;
import java.util.List;
public class HelloWordImpl implements HelloWord {
public HelloWordImpl(){
}
public void sayHello() {
// TODO Auto-generated method stub
System.out.println("Hello word ! ");
}
public void sayName(String name){
System.out.println(name);
}
public List getList(){
List list = new ArrayList();
list.add("name");
return list;
}
}
动态代理类:
package com.bian.jdom.asyn;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class DynamicProxy implements InvocationHandler {
private Object object = null;
public Object bind(Object obj){
object = obj;
return Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), this);
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result = method.invoke(object, args);
return result;
}
}
测试类:
package com.bian.jdom.asyn;
import java.util.List;
public class TestDynamicProxy {
public static void main(String[] args){
HelloWord helloword = new HelloWordImpl();
DynamicProxy proxy = new DynamicProxy();
//在这里绑定的是HelloWord,也就是HelloWord是被代理接口。所以绑定关系时,需要传递一个HelloWorld的实现类的实例化对象。
HelloWord hello = (HelloWord)proxy.bind(helloword);
hello.sayHello();
hello.sayName("bian");
List list = hello.getList();
System.out.println(list.size()+" "+list.get(0).toString());
}
}