JDK动态代理

来源:互联网 发布:mac怎么下软件 编辑:程序博客网 时间:2024/05/17 01:05
  1. package com.rx.spring.dynamicproxy;
  2. public interface UserManager {
  3.     public void addUser(String username, String password);
  4.     
  5.     public void deleteUser(int id);
  6.     
  7. }

 

  1. package com.rx.spring.dynamicproxy;
  2. public class UserManagerImpl implements UserManager {
  3.     public void addUser(String username, String password) {
  4.         System.out.println("-------UserManagerImpl.addUser()----------");
  5.     }
  6.     public void deleteUser(int id) {
  7.         System.out.println("-------UserManagerImpl.deleteUser()----------");
  8.     }
  9. }

 

 

 

  1. package com.rx.spring.dynamicproxy;
  2. import java.lang.reflect.InvocationHandler;
  3. import java.lang.reflect.Method;
  4. import java.lang.reflect.Proxy;
  5. public class SecurityHandler implements InvocationHandler {
  6.     private Object targetObject;
  7.     
  8.     public Object newProxy(Object targetObject) {
  9.         this.targetObject = targetObject;
  10.         return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), 
  11.                                       targetObject.getClass().getInterfaces(), 
  12.                                       this);
  13.     }
  14.     
  15.     @Override
  16.     public Object invoke(Object proxy, Method method, Object[] args)
  17.             throws Throwable {
  18.         // 调用前置函数
  19.         checkSecurity();
  20.         Object ret = null;
  21.         try {
  22.             ret = method.invoke(this.targetObject, args);
  23.         }catch(Exception e) {
  24.             e.printStackTrace();
  25.             throw new java.lang.RuntimeException(e);
  26.         }
  27.         return ret;
  28.     }
  29.     private void checkSecurity() {
  30.         System.out.println("----------checkSecurity()---------------");
  31.     }
  32.     
  33. }

 

 

  1. package com.rx.spring.dynamicproxy;
  2. public class Client {
  3.     public static void main(String[] args) {
  4.         
  5.         SecurityHandler handler = new SecurityHandler();
  6.         
  7.         // 返回的是代理对象,可以通过调试进行观察
  8.         UserManager userManager = (UserManager)handler.newProxy(new UserManagerImpl());
  9.         
  10.         //System.out.println(userManager);
  11.         
  12.         userManager.deleteUser(1);
  13.         
  14.         // 测试不使用代理的情况
  15.         UserManager userManager1 = new UserManagerImpl();
  16.         //System.out.println(userManager1);
  17.         userManager1.deleteUser(1);
  18.     }
  19. }

 

运行结果:

  1. ----------checkSecurity()---------------
  2. -------UserManagerImpl.deleteUser()----------
  3. -------UserManagerImpl.deleteUser()----------

 

spring动态代理显示图注:参看传智播客

 

 

原创粉丝点击