1 package com.ljq.test;
 2 
 3  /**
 4  * 定义一个HelloWorld接口
 5  * 
 6  * @author jiqinlin
 7  *
 8  */
 9  public interface HelloWorld {
10     public void sayHelloWorld();
11 }
 
 1 package com.ljq.test;
 2 
 3  /**
 4  * 类HelloWorldImpl是HelloWorld接口的实现
 5  * 
 6  * @author jiqinlin
 7  *
 8  */
 9  public class HelloWorldImpl implements HelloWorld{
10 
11     public void sayHelloWorld() {
12         System.out.println("HelloWorld!");
13     }
14 
15 }
 
 1 package com.ljq.test;
 2 
 3  import java.lang.reflect.InvocationHandler;
 4  import java.lang.reflect.Method;
 5 
 6  /**
 7  * 实现在方法调用前后向控制台输出两句字符串
 8  * 
 9  * @author jiqinlin
10  *
11  */
12  public class HelloWorldHandler implements InvocationHandler{
13     //要代理的原始对象
14      private Object obj;
15     
16     public HelloWorldHandler(Object obj) {
17         super();
18         this.obj = obj;
19     }
20 
21     /**
22      * 在代理实例上处理方法调用并返回结果
23      * 
24      * @param proxy 代理类
25      * @param method 被代理的方法
26      * @param args 该方法的参数数组
27      */
28     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
29         Object result = null;
30         //调用之前
31          doBefore();
32         //调用原始对象的方法
33         result=method.invoke(obj, args);
34         //调用之后
35         doAfter();
36         return result;
37     }
38     
39     private void doBefore(){
40         System.out.println("before method invoke");
41     }
42     
43     private void doAfter(){
44         System.out.println("after method invoke");
45     }
46     
47 }