代理模式: A想出售自己弄的小手艺, --具体类 放到精品店销售 --代理类 具体类实现接口中的方法 代理类去实现implements InvocationHandler接口。根据invoke()方法去实现 那么,该类必须拥有A的手艺 。将具体类放到代理类中,如:this.具体类=具体类; 代理模式:AOP基于代理模式,符合AOP思想。 动态代理dynamic: 一个接口 public interface Hello { public void say(String name); //...另一个方法 public void say2(String name); } 一个具体类 public class RealHello implements Hello{ public void say(String name) { System.out.println("realhello:"+name); } public void say2(String name) { System.out.println("realhello:"+name); } } 一个代理类 import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; //实现了InvocationHandler接口 public class HelloDanymicProxy implements InvocationHandler { //定义对象 Object realObj; public Object getProxyObject(Object realObj) { //确定对象 this.realObj = realObj; //使用Proxy.newProxyInstance()方法加载对象 // realObj.getClass() 获取类 //.getClassLoader() 加载类 // getInterfaces() 获取接口 Object proxyObject = Proxy.newProxyInstance(realObj.getClass() .getClassLoader(), realObj.getClass().getInterfaces(), this); //返回加载的类 return proxyObject; } //在调用方法的时候拦截 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("getConnection......."); //获取该类的方法 Object obj = method.invoke(realObj, args); System.out.println("close connection......."); return obj; } } Main方法 public class T { /** * 动态代理 */ public static void main(String[] args) { //接口指向实现他的类获取其中的方法,将具体类存入代理类 Hello hello = (Hello) new HelloDanymicProxy() .getProxyObject(new RealHello()); //调用具体类的方法 hello.say("aa"); hello.say2("bb"); } } 静态代理 定义接口 public interface Hello { public void say(String name); //...另一个方法 } 具体类 public class ProxyHello implements Hello{ //具体类 Hello realHello; //构造方法将具体类存入本类 public ProxyHello(Hello realHello) { this.realHello = realHello; } //实现Hello接口中的方法 public void say(String name) { System.out.println("get connection ....."); //代理具体类的方法 realHello.say(name); System.out.println("close........."); } } 代理类 public class RealHello implements Hello{ public void say(String name) { System.out.println("realhello"+name); } } Main public class T { /** * 静态代理 */ public static void main(String[] args) { // TODO Auto-generated method stub new ProxyHello(new RealHello()).say("aa"); } } 例子:动态获取数据连接方式