动态代理工厂类

huangxw000 2012-04-13 10:34:12
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 {

}

}

...全文
119 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧