日期:2014-05-19 浏览次数:20900 次
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;
}
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 { } }