import java.lang.reflect.InvocationHandler;  
import java.lang.reflect.Proxy;  
public abstract class JdkProxyFactoryUtils {  
  
    public static Object wrap(InvocationHandlerWrapper hander) {  
    Class<?> clazz = hander.getBean().getClass();  
    return Proxy.newProxyInstance(clazz.getClassLoader(),  
        clazz.getInterfaces(), hander);  
    }  
} import java.lang.reflect.InvocationHandler;  
import java.lang.reflect.Method;  
  
public abstract class InvocationHandlerWrapper implements InvocationHandler {  
    private Object object = null;  
  
    public InvocationHandlerWrapper(Object object) {  
    super();  
    this.object = object;  
    }  
  
    public Object getBean() {  
    return object;  
    }  
  
    abstract public Object invoke(Object proxy, Method method, Object[] args)  
        throws Throwable;  
  
}  
测试代码,定义一个过滤器,对HttpServletRequest和HttpServletResponse包装,实现输出调用的方法的名称。
package com.mvc.filter;import java.io.IOException;
import java.lang.reflect.Method;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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.mvc.common.InvocationHandlerWrapper;
import com.mvc.common.JdkProxyFactoryUtils;public class ProxyFilter implements Filter {    @Override
    public void destroy() {    }    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
HttpServletRequest httpServletRequestWrapper = (HttpServletRequest) JdkProxyFactoryUtils
.wrap(new InvocationHandlerWrapper(req) {
    @Override
    public Object invoke(Object proxy, Method method,
    Object[] args) throws Throwable {
Object result = method.invoke(this.getBean(), args);
System.out.println(method.getName());
return result;
    }
});
HttpServletResponse httpServletResponseWrapper = (HttpServletResponse) JdkProxyFactoryUtils
.wrap(new InvocationHandlerWrapper(resp) {
    @Override
    public Object invoke(Object proxy, Method method,
    Object[] args) throws Throwable {
Object result = method.invoke(this.getBean(), args);
System.out.println(method.getName());
return result;
    }
});
chain.doFilter(httpServletRequestWrapper, httpServletResponseWrapper);
    }    @Override
    public void init(FilterConfig arg0) throws ServletException {    }}

解决方案 »

  1.   

    CGLIB实现
    import java.lang.reflect.Method;import net.sf.cglib.proxy.MethodInterceptor;
    import net.sf.cglib.proxy.MethodProxy;public abstract class MethodInterceptorHander implements MethodInterceptor {
        private Object bean = null;    public MethodInterceptorHander(Object bean) {
    super();
    this.bean = bean;
        }    public Object getBean() {
    return bean;
        }    public abstract Object intercept(Object object, Method method,
        Object[] objects, MethodProxy methodProxy) throws Throwable;
    }package com.mvc.common;import net.sf.cglib.proxy.Enhancer;public abstract class CGLIBProxyFactoryUtils {    public static Object wrap(MethodInterceptorHander hander) {
    Object obj = null;
    Class<?> clazz = null;
    try {
        clazz = hander.getBean().getClass();
        Enhancer e = new Enhancer();
        e.setSuperclass(clazz);
        e.setCallback(hander);
        obj = e.create();
    } catch (Throwable e) {
        e.printStackTrace();
    }
    return obj;
        }    public static Object wrap(MethodInterceptorHander hander,
        Class<?>[] argmentTypes, Object[] argments) {
    Object obj = null;
    Class<?> clazz = null;
    try {
        clazz = hander.getBean().getClass();
        Enhancer e = new Enhancer();
        e.setSuperclass(clazz);
        e.setCallback(hander);
        obj = e.create(argmentTypes, argments);
    } catch (Throwable e) {
        e.printStackTrace();
    }
    return obj;
        }
    }
      

  2.   

    没看明白什么意思,出来晒代码的?
    如果我是你leader我会让你重新写。