JDK动态代理实例

JDK动态代理是基于接口实现的,包括目标类,扩展类,目标的接口.

扩展类对象
public class MyInvocationHandler implements InvocationHandler {

   

     // 目标对象  

    private Object target; 

     

    /**

    * 构造方法

    * @param target 目标对象 

    */ 

    publicMyInvocationHandler(Object target) { 

       super(); 

       this.target = target; 

   } 

 

 

    /**

    * 执行目标对象的方法

    */ 

    public Object invoke(Objectproxy, Method method, Object[] args) throws Throwable { 

         

       // 在目标对象的方法执行之前简单的打印一下 

       System.out.println("------------------before------------------"); 

         

       // 执行目标对象的方法 

       Object result = method.invoke(target, args); 

         

       // 在目标对象的方法执行之后简单的打印一下 

       System.out.println("-------------------after------------------");  

         

       return result; 

   } 

 

    /**

    * 获取目标对象的代理对象

    * @return代理对象

    */ 

    public Object getProxy(){ 

       return Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),  

                target.getClass().getInterfaces(),this); 

   } 

 

}
 
   

 

目标的接口
publicinterface UserService {

       /**

    * 目标方法 

    */ 

    publicabstractvoid add(); 

 

}

目标类

publicclass UserServiceImpl implements UserService {

 

     

    @override

    publicvoid add() { 

       System.out.println("--------------------add---------------"); 

   } 

}

测试

publicclass ProxyTest {

   

      @Test 

        publicvoid testProxy() throws Throwable { 

            // 实例化目标对象 

            UserService userService = newUserServiceImpl(); 

             

            // 实例化InvocationHandler 

            MyInvocationHandler invocationHandler =newMyInvocationHandler(userService); 

             

            // 根据目标对象生成代理对象 

            UserService proxy = (UserService)invocationHandler.getProxy(); 

             

            // 调用代理对象的方法 

            proxy.add(); 

             

        } 

 

}

 

 

 

你可能感兴趣的:(JDK动态代理)