zoukankan      html  css  js  c++  java
  • spring web 生命周期理解

    spring web /bean 生命周期

    反射注解

    aop代理类生成 

    init servlet  初始化

        load spring-context.xml

        load XmlParser 类解析对象   bean or aop or component-scan or the readding properties 

             // bean

             create bean

             配置bean 属性

             判断 BeanNameAware接口->setBeanName

             判断 BeanFactoryAware接口-> setBeanFactory

             判断 InitializingBean接口 -> afterPropertiesSet

             判断 init-method 属性,调用 bean init

             判断 BeanPostProcessors接口->processAfterInitialization

    service servlet   http请求

    destroy servlet  销毁

             //bean 

             判断 DisposableBean接口->destroy

             判断 destroy-method属性 调用

    以上bean的生命周期可以概括为:

       Bean创建

       Bean属性注入

       Bean 初始化

       Bean销毁

    spring boot

        spring boot main : org.springframework.boot.loader.JarLauncher

        扫描注解

         aop代理类生成

        读取appilcation.properties or yml文件

        加载servlet

           初始化Autowired 初始化bean RequestMapping 。。。

        

        其它同上

    spring的事件加载抅子

    事件类型,按照类型区分:

    public class ApplicationEventListener implements ApplicationListener {
    
        @Override
        public void onApplicationEvent(ApplicationEvent event) {
            // 在这里可以监听到Spring Boot的生命周期
            if (event instanceof ApplicationEnvironmentPreparedEvent) { // 初始化环境变量 }
            else if (event instanceof ApplicationPreparedEvent) { // 初始化完成 }
            else if (event instanceof ContextRefreshedEvent) { // 应用刷新 }
            else if (event instanceof ApplicationReadyEvent) {// 应用已启动完成 }
            else if (event instanceof ContextStartedEvent) { // 应用启动,需要在代码动态添加监听器才可捕获 }
            else if (event instanceof ContextStoppedEvent) { // 应用停止 }
            else if (event instanceof ContextClosedEvent) { // 应用关闭 }
            else {}
        }
    
    }

    可以针对单事件类型注册:

            SpringApplication application = new SpringApplication(IpsApplication.class);
            application.addListeners(new appEvent());
            application.run(args);
    package xx;
    
    import org.springframework.boot.context.event.ApplicationReadyEvent;
    import org.springframework.context.ApplicationListener;
    import org.springframework.context.event.ContextRefreshedEvent;
    
    public class appEvent implements ApplicationListener<ApplicationReadyEvent> {
        @Override
        public void onApplicationEvent(ApplicationReadyEvent evt) {
            System.out.println("xxxxx app started");
        }
    }

    每次请求可以增加拦截器

    @ControllerAdvice
    public class ErrorAdvice {
    
        @InitBinder
        public void init(){
            
        }
    
        /**
         * 错误处理
         */
        @ResponseBody
        @ExceptionHandler(value=Exception.class)
        public String errorHandler(Exception ex){
            return "xx";
        }
    }

    页面的请求可以实现:

    1、aop切面实现监控

    2、拦截器

    3、过滤器

  • 相关阅读:
    is_enable()、is_displayed()、isSelected()
    python selenium(常用关键字)
    Jenkins 构建 Jmeter 项目之源代码管理(SVN)
    Jenkins 构建 Jmeter 项目
    SAP SD基础知识之现金销售
    SAP SD基础知识之与FI集成相关的流程与配置
    SAP SD 基础知识之计划行类别(Schedule Line Category)
    SAP MM 事务代码MRKO触发的财务凭证不会出现在PO History里
    SAP MM 对于MRKO事务代码的几点优化建议
    SAP SD 销售中的借贷项凭证
  • 原文地址:https://www.cnblogs.com/a-xu/p/9726289.html
Copyright © 2011-2022 走看看