接口: public interface HelloWorld { public void sayHelloWorld(); } 实现类: /** * 目标类 * @author ChenGuanwei * */ public class HelloWorldImpl implements HelloWorld { public void sayHelloWorld() { System.out.println("Hello,World!"); } } 静态代理: 静态代理类: /** * 静态代理类 * @author ChenGuanwei * */ public class HelloWorldStaticProxy implements HelloWorld{ //要代理的目标对象 private HelloWorld targetObj; public HelloWorldStaticProxy(HelloWorld targetObj){ this.targetObj = targetObj; } public void sayHelloWorld() { before(); targetObj.sayHelloWorld(); after(); } /** * 在目标方法之前执行 */ private void before(){ System.out.println("Before sayHelloWorld()"); } /** * 在目标方法之后执行 */ private void after(){ System.out.println("After sayHelloWorld()"); } } 静态代理客户端类: /** * 静态代理类的客户方法 * @author ChenGuanwei * */ public class ClientStaticProxy { public static void main(String[] args) { //先实例化一个目标对象 HelloWorld targetObj = new HelloWorldImpl(); //实例化静态代理对象 HelloWorldStaticProxy proxyObj = new HelloWorldStaticProxy(targetObj); //调用代理的目标方法 proxyObj.sayHelloWorld(); } } 动态代理: 动态代理类: import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; /** * 动态代理类,需要继承InvocationHandler接口,并实现invoke()方法 * @author ChenGuanwei * */ public class HelloWorldDynamicProxy implements InvocationHandler{ //需要代理的目标对象 private Object targetObj; public HelloWorldDynamicProxy(Object targetObj) { this.targetObj = targetObj; } /** * 在代理实例上处理方法调用并返回结果 */ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //定义返回对象 Object result = null; //调用before方法 before(); //调用目标对象的方法 result = method.invoke(this.targetObj, args); //调用after方法 after(); return result; } /** * 在目标方法之前执行 */ private void before(){ System.out.println("Before sayHelloWorld()"); } /** * 在目标方法之后执行 */ private void after(){ System.out.println("After sayHelloWorld()"); } } 动态代理客户端类: import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; /** * 动态代理类的客户方法 * @author ChenGuanwei * */ public class ClientDynamicProxy { public static void main(String[] args) { //先实例化一个目标对象 HelloWorld targetObj = new HelloWorldImpl(); //获取一个InvocationHandler实现,此处是HelloWorldDynamicProxy对象 InvocationHandler handler = new HelloWorldDynamicProxy(targetObj); /* * 创建动态代理对象 * newProxyInstance方法的参数: * 1、loader - 定义代理类的类加载器。2、interfaces - 代理类要实现的接口列表。3、h - 指派方法调用的调用处理程序 */ HelloWorld proxyObj = (HelloWorld)Proxy.newProxyInstance(HelloWorld.class.getClassLoader(),new Class[]{HelloWorld.class},handler); proxyObj.sayHelloWorld(); } }