流程图
示例代码
package DPCOR; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.List; class Emp { String id; String name; public Emp(String id, String name) { super(); this.id = id; this.name = name; } @Override public String toString() { return "Emp [id=" + id + ", name=" + name + "]"; } } interface EmpDao { void save(Emp e); } class EmpImpl implements EmpDao { @Override public void save(Emp e) { System.out.println("save - > " + e); } } interface Filter { void doFilter(Object proxy, Method method, Object[] args, FilterChain filterChain) throws Throwable; } class Filter1 implements Filter { private Object object; public Filter1(Object object) { this.object = object; } @Override public void doFilter(Object proxy, Method method, Object[] args, FilterChain filterChain) throws Throwable { System.out.println("验证1 - OK "); filterChain.invoke(proxy, method, args); } } class Filter2 implements Filter { private Object object; public Filter2(Object object) { this.object = object; } @Override public void doFilter(Object proxy, Method method, Object[] args, FilterChain filterChain) throws Throwable { System.out.println("验证2 - OK "); filterChain.invoke(proxy, method, args); } } class Filter3 implements Filter { private Object object; public Filter3(Object object) { this.object = object; } @Override public void doFilter(Object proxy, Method method, Object[] args, FilterChain filterChain) throws Throwable { System.out.println("执行业务逻辑 ↓ "); Object o = method.invoke(object, args); System.out.println("执行业务逻辑 ↑ "); filterChain.invoke(proxy, method, args); } } class Filter4 implements Filter { private Object object; public Filter4(Object object) { this.object = object; } @Override public void doFilter(Object proxy, Method method, Object[] args, FilterChain filterChain) throws Throwable { System.out.println("验证3 - OK "); filterChain.invoke(proxy, method, args); } } class FilterChain implements InvocationHandler { List<Filter> filters = new ArrayList<>(); int index = 0; public void addFilter(Filter f) { filters.add(f); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if (index == filters.size()) return null; Filter filter = filters.get(index); index++; filter.doFilter(proxy, method, args, this); return null; } } /** * 假设有一个保存数据的方法 保存前需要2次验证,保存后需要1次验证 * * @author renguanyu * */ public class ProxyCORDemo { public static void main(String[] args) { System.out.println("============ 动态代理 + 责任链 ============="); // 示例数据 Emp e1 = new Emp("1", "liubei"); EmpDao empImpl = new EmpImpl(); Filter filter1 = new Filter1(empImpl);// 验证1 Filter filter2 = new Filter2(empImpl);// 验证2 Filter filter3 = new Filter3(empImpl);// 业务处理 Filter filter4 = new Filter4(empImpl);// 验证3 FilterChain filterChain = new FilterChain(); filterChain.addFilter(filter1); filterChain.addFilter(filter2); filterChain.addFilter(filter3); filterChain.addFilter(filter4); EmpDao empDao = (EmpDao) Proxy.newProxyInstance(Emp.class.getClassLoader(), new Class[] { EmpDao.class }, filterChain); empDao.save(e1); } }
原文:https://www.cnblogs.com/renguanyu/p/12944334.html