注入理解依賴注入(控制反轉)
阿新 • • 發佈:2020-12-15
package com.test.chain; import java.util.ArrayList; import java.util.List;
public class BizFilterChain { /** * 執行器集合 */ public List<BizFilter> bizFilters; /** * 執行器下標 */ private int pos; public void addFilter(BizFilter bizFilter){ this.bizFilters.add(bizFilter); }public BizFilterChain(){ this.bizFilters = new ArrayList<>(); } public void process(BizRequest request, BizResponse response){ this.pos++; if (bizFilters.size() >= pos) { BizFilter nextBizFilter = this.bizFilters.get(pos-1); nextBizFilter.filter(request, response,this); } }; }
具體的處理器:
package com.test.chain; public abstract class AbstractFilter implements BizFilter { @Override public void filter(BizRequest request, BizResponse response, BizFilterChain chain) { if (condition(request,response)) { this.doFilter(request, response, chain); }else { //此處為了繼續執行下一個處理器,跟dofilter裡的process作用一致 chain.process(request,response); } } /** * 條件判斷作為是否執行此filter的准入條件,具體子類需要實現 * @param request * @param response * @return */ public abstract boolean condition(BizRequest request, BizResponse response); /** * 子類的具體實現邏輯 * @param request * @param response * @param chain */ public abstract void doFilter(BizRequest request, BizResponse response, BizFilterChain chain); }
public interface BizFilter { /** * 執行方法 * @param request * @param response * @param chain */ void filter(BizRequest request, BizResponse response,BizFilterChain chain); }
/** * 具體的引數傳遞物件 * @author chenwei * @date 2018/12/17 10:29 * @Description */ public class BizRequest { }
package com.test.chain; /** * 結果返回物件 * @author chenwei * @date 2018/12/17 10:29 * @Description */ public class BizResponse { }
package com.test.chain; /** * @author chenwei * @date 2018/12/17 10:30 * @Description */ public class Demo1Filter extends AbstractFilter { @Override public void doFilter(BizRequest request, BizResponse response,BizFilterChain chain) { System.out.println("demo1 已經處理過"); //執行這個是為了能繼續執行下一個filter,如果想直接返回的話,結束執行,則直接return,不執行process方法 chain.process(request, response); } @Override public boolean condition(BizRequest request, BizResponse response) { return true; } }
package com.test.chain; /** * @author chenwei * @date 2018/12/17 10:30 * @Description */ public class Demo2Filter extends AbstractFilter { @Override public boolean condition(BizRequest request, BizResponse response) { return true; } @Override public void doFilter(BizRequest request, BizResponse response,BizFilterChain chain) { System.out.println("demo2 已經處理過"); chain.process(request,response); } }
package com.test.chain; /** * @author chenwei * @date 2018/12/17 10:30 * @Description */ public class Demo3Filter extends AbstractFilter { @Override public boolean condition(BizRequest request, BizResponse response) { return true; } @Override public void doFilter(BizRequest request, BizResponse response,BizFilterChain chain) { System.out.println("demo3 已經處理過"); chain.process(request,response); } }
package com.test.chain; /** * @author chenwei * @date 2018/12/17 10:42 * @Description */ public class BizExecuter { public static void main(String[] args) { Demo1Filter demo1 = new Demo1Filter(); Demo2Filter demo2 = new Demo2Filter(); Demo3Filter demo3 = new Demo3Filter(); BizFilterChain chain = new BizFilterChain(); chain.addFilter(demo1); chain.addFilter(demo2); chain.addFilter(demo3); BizRequest request = new BizRequest(); BizResponse response = new BizResponse(); chain.process(request, response); } }