动态代理
来源:互联网 发布:智能数据盒子 编辑:程序博客网 时间:2024/06/05 07:00
基于接口的动态代理:Proxy
如果一个类没有实现任何的接口,此种代理就不能使用了。
Proxy 类的静态方法:
newProxyInstance(ClassLoader loader,Class[] interfaces,InvocationHandler h);
* ClassLoader :类的加载器.
* Class[] :类实现的所有的接口的Class的对象.
* InvocationHandler :真正的处理对象.(拦截器)
@Override /** * proxy:代理对象. * method:指代的方法本身(正在执行的方法) * args :方法的参数列表 * 方法可能有返回值 */ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { return null; }
package com.ail.all;import java.io.IOException;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebFilter(urlPatterns="/*")public class Myfilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //在这里解决乱码的问题 final HttpServletRequest req = (HttpServletRequest) request; //req.getParameter(name) HttpServletRequest myProxy = (HttpServletRequest) Proxy.newProxyInstance(req.getClass().getClassLoader(), req.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //增强的是getparmter if("getParameter".equals(method.getName())) { String m = req.getMethod(); if("get".equalsIgnoreCase(m)) { String value = (String) method.invoke(req, args); value=new String(value.getBytes("iso-8859-1"),"utf-8"); return value; }else if("post".equalsIgnoreCase(m)){ req.setCharacterEncoding("utf-8"); } } return method.invoke(req, args); } }); chain.doFilter(myProxy, response); } @Override public void destroy() { // TODO Auto-generated method stub }}
0 0
- 代理-->静态代理&动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- NOIP模拟题 [LIS][建图][递推][容斥]
- 邮件服务器
- python try/except/finally
- RecyclerView的列表布局中match_parent失效的解决方法
- 获取mysql数据库中的自增主键属性值和非自增主键属性值的方法
- 动态代理
- sparkmllib线性回归源码学习
- 数据结构之串—关键词索引表
- Chat 聊天界面
- 欢迎使用CSDN-markdown编辑器
- URAL 1036 Lucky Tickets 【dp】【高精度】
- 写LCD驱动程序步骤
- c++
- 实例分析首次适应算法、最佳适应算法、最差适应算法