zoukankan      html  css  js  c++  java
  • 动态代理

    主营业务接口:

    public interface IUserManger {
        public void AddUser(String UserName, String Password);
        public void ModifyUser(int id, String UserName, String Password);
    
    }

    接口实现类:

    public class UserManagerImpl implements IUserManager{
    
    
        public void addUser(String username, String password) {
            System.out.println("=========UserManagerImpl.addUser()===========");
        }
    
        public void modifyUser(int id, String username, String password) {
            System.out.println("=========UserManagerImpl.modifyUser()===========");
        }
    }

    继承invocationHandler的类:

    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    //帮助我们动态的生成代理对象JDK1.5
    
    public class SecurityHandler implements InvocationHandler {
    
        private Object targetObject;//目标对象
    
        //生成代理对象
        public Object proxyInstance(Object paramObject){
            this.targetObject = paramObject;
            return Proxy.newProxyInstance(
                    this.targetObject.getClass().getClassLoader(),
                    this.targetObject.getClass().getInterfaces(),
                    this);//得到目标加载器实现invocationHandler的类,也就是本类
        }
    
        //传入代理对象,目标对象的方法,方法参数,代理方法与目标方法都实现了IUserManager
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            Object resultObj = null;
            checkSecurity();
            try{
                resultObj = method.invoke(this.targetObject,args);//递归调用
            }catch (Exception ex){
                ex.printStackTrace();
            }
            return resultObj;
        }
    
        public void checkSecurity(){
            System.out.println("=======checkSecurity()==========");
        }
    }

    测试类:

    public class Client {
    
        public static void main(String[] args) {
            SecurityHandler securityHandler = new SecurityHandler();
            IUserManager iUserManager = (IUserManager) securityHandler.proxyInstance(new UserManagerImpl());
            iUserManager.addUser("abc","123");
    
        }
    }
  • 相关阅读:
    iPhone网络编程初体验
    va_list实现不定参数C函数
    iphone网络编程总结(链接)
    一周好文(4)
    10个迷惑新手的Cocoa&Objectivec开发问题
    Flash通过Action Script调用C++接口
    easyui表单对numberbox控件进行赋值需要注意
    asp.net生成缩略图及给原始图加水印
    用超链接在页面之间传值的注意事项(来自:http://www.souzz.net)
    超酷的分类导航代码
  • 原文地址:https://www.cnblogs.com/hetaoyuan/p/12511141.html
Copyright © 2011-2022 走看看