第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

簡單模仿Struts2實現(xiàn)AOP

標簽:
Java

Struts2非常巧妙地利用递归算法来实现AOP(Aspect Oriented Programming,面向切面编程),我们来简单模仿一下其执行流程。
Action接口:

public interface Action {
    String execute();
}

MyAction实现Action:

public class MyAction implements Action {
    @Override
    public String execute() {
        System.out.println("=====执行Action=====");
        return "success";
    }
}

Interceptor接口:

public interface Interceptor {
    String intecept(ActionInvocation invocation);
}

下面分别是Interceptor的三个实现类:

public class TimerInterceptor implements Interceptor{
    @Override
    public String intecept(ActionInvocation invocation) {
        System.out.println("=====1.执行TimerInterceptor");
        String result = invocation.invoke();
        System.out.println("=====1.结束执行TimerInterceptor");
        return result;
    }
}

public class LoggingInterceptor implements Interceptor{
    @Override
    public String intecept(ActionInvocation invocation) {
        System.out.println("=====2.执行LoggingInterceptor");
        String result = invocation.invoke();
        System.out.println("=====2.结束执行LoggingInterceptor");
        return result;
    }
}

public class ChainInterceptor implements Interceptor{
    @Override
    public String intecept(ActionInvocation invocation) {
        System.out.println("=====3.执行ChainInterceptor");
        String result = invocation.invoke();
        System.out.println("=====3.结束执行ChainInterceptor");
        return result;
    }
}

下面就是我们的总指挥ActionInvocation接口了:

public interface ActionInvocation {
    String invoke();
}

ActionInvocation的默认实现类DefaultActionInvocation,所有的调度都是在这里完成的:

public class DefaultActionInvocation implements ActionInvocation{
    private int count=0;    //定义一个数字来判断interceptors集合是否被执行完
    private Action action;
    private List<Interceptor> interceptors;
    public DefaultActionInvocation() {
        interceptors=new ArrayList<Interceptor>();
    }
    @Override
    public String invoke() {
        String result=null;
        if(count<interceptors.size()){  //如果interceptors集合没有执行完,继续执行下一个interceptor
            /*这步是递归的关键,intercept方法中会调用ActionInvocation的invoke方法,形成递归调用*/
            result=interceptors.get(count++).intecept(this);
        }else if(count==interceptors.size()){   //interceptors集合执行完毕
            result=action.execute();
        }
        return result;
    }
    //设置Action
    public void setAction(Action action){
        this.action=action;
    }
    //添加interceptor
    public void addInterceptor(Interceptor interceptor){
        interceptors.add(interceptor);
    }
}

好了,该测试一下了,看看效果,测试代码如下:

public class MyTestAOP {
    public static void main(String[] args) {
        DefaultActionInvocation actionInvocation=new DefaultActionInvocation();

        Interceptor timerInterceptor=new TimerInterceptor();
        Interceptor loggingInterceptor=new LoggingInterceptor();
        Interceptor chainInteceptor=new ChainInterceptor();

        Action action=new MyAction();
        //添加拦截器
        actionInvocation.addInterceptor(timerInterceptor);
        actionInvocation.addInterceptor(loggingInterceptor);
        actionInvocation.addInterceptor(chainInteceptor);
        //设置Action
        actionInvocation.setAction(action);
        //总指挥,发威吧
        actionInvocation.invoke();
    }
}

犹抱琵琶半遮面的测试结果露面了:

=====1.执行TimerInterceptor
=====2.执行LoggingInterceptor
=====3.执行ChainInterceptor
=====执行Action=====
=====3.结束执行ChainInterceptor
=====2.结束执行LoggingInterceptor
=====1.结束执行TimerInterceptor

测试成功,收工,大家一起加油。

點擊查看更多內(nèi)容
8人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消