java中的代理

来源:互联网 发布:网络摄像机多少钱 编辑:程序博客网 时间:2024/06/07 02:56

对指定的接口或类的某一个方法进行功能扩展,可以使用代理。

使用示例:

public void doFilter(ServletRequest request, ServletResponse response,            FilterChain chain) throws IOException, ServletException {        //需求:要对request的getParameter方法进行功能扩展,处理get提交中文编码问题        //对request创建代理对象            HttpServletRequest proxy =(HttpServletRequest)Proxy.newProxyInstance(            request.getClass().getClassLoader(),//指定当前使用的类加载器            new Class[] {HttpServletRequest.class},//目标对象实现的接口类型            new InvocationHandler(){  //事件处理器            public Object invoke(Object proxy,Method method,Object[] args)throws Throwable               {                 //定义方法返回值                 Object returnValue = null;                 //获取方法名                 String methodName = method.getName();                 //判断 扩展方法的方法名                 if("getParameter".equals(methodName))                 {                   //方法的参数封装在args中                   String value = request.getParameter(args[0].toString());//获取请求的值                   //获取提交方式                   String submitMethod = request.getMethod();                   //如果是get提交,需要对数据进行处理                   if("GET".equals(submitMethod))                   {                      value = new String(value.getBytes(),"UTF-8");                      }                   return value;                 }                 else                 {                   //执行request对象的其他方法                   returnValue = method.invoke(request,args);                 }                 return returnValue;               }           }       )        chain.doFilter(proxy, response);    }
原创粉丝点击