Struts2动态代理生成action源码执行流程

动态代理生成action这部分源码,应该算是Struts2之中比较底层的代码了,在这里贴出源码的执行流程,仅供参考。

核心过滤器StrutsPrepareAndExecuteFilter,在此只贴出doFilter()的代码

  public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

        try {
            prepare.setEncodingAndLocale(request, response);
            prepare.createActionContext(request, response);
            prepare.assignDispatcherToThread();
            if (excludedPatterns != null && prepare.isUrlExcluded(request, excludedPatterns)) {
                chain.doFilter(request, response);
            } else {
                request = prepare.wrapRequest(request);
                ActionMapping mapping = prepare.findActionMapping(request, response, true);
                if (mapping == null) {
                    boolean handled = execute.executeStaticResourceRequest(request, response);
                    if (!handled) {
                        chain.doFilter(request, response);
                    }
                } else {
                    execute.executeAction(request, response, mapping);
                }
            }
        } finally {
            prepare.cleanupRequest(request);
        }
    }

进入execute.executeAction(request, response, mapping);

进入ExecuteOperations的serviceAction()

  public void executeAction(HttpServletRequest request, HttpServletResponse response, ActionMapping mapping) throws ServletException {
        dispatcher.serviceAction(request, response, servletContext, mapping);
    }

进入Dispatcher类之中的serviceAction()方法

Struts2动态代理生成action源码执行流程_第1张图片

点进去,进入DefaultActionProxyFactory类的createActionProxy()方法

这里写图片描述

进入这个类的重载方法

Struts2动态代理生成action源码执行流程_第2张图片

进入DefaultActionProxy的prepare()方法

Struts2动态代理生成action源码执行流程_第3张图片

进入DefaultActionInvocation的init()方法

Struts2动态代理生成action源码执行流程_第4张图片

进入DefaultActionInvocation的createAction()方法

Struts2动态代理生成action源码执行流程_第5张图片

进入ObjectFactory的buildAction()方法

这里写图片描述

跳转

这里写图片描述
再跳转

Struts2动态代理生成action源码执行流程_第6张图片

点击buildBean()方法

这里写图片描述

会发现这里运用反射创建代理action的instance,并返回,完成action的创建。

你可能感兴趣的:(Struts2源码浅析)