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、过滤器

spring web 生命周期理解的更多相关文章

  1. 常见问题:Web/Servlet生命周期与Spring Bean生命周期

    Servlet生命周期 init()初始化阶段 Servlet容器加载Servlet(web.xml中有load-on-startup=1;Servlet容器启动后用户首次向Servlet发请求;Se ...

  2. Spring的Bean生命周期理解

    首先,在经历过很多次的面试之后,一直不能很好的叙述关于springbean的生命周期这个概念.今日对于springBean的生命周期进行一个总结. 一.springBean的生命周期: 如下图所示: ...

  3. spring学习三:Spring Bean 生命周期

    Bean 的生命周期 理解 Spring bean 的生命周期很容易.当一个 bean 被实例化时,它可能需要执行一些初始化使它转换成可用状态.同样,当 bean 不再需要,并且从容器中移除时,可能需 ...

  4. 大厂高频面试题Spring Bean生命周期最详解

    Spring作为当前Java最流行.最强大的轻量级框架.Spring Bean的生命周期也是面试高频题,了解Spring Bean周期也能更好地帮助我们解决日常开发中的问题.程序员应该都知道Sprin ...

  5. Spring的生命周期

    转:https://blog.csdn.net/liuxilil/article/details/4676088 Spring的生命周期. 容器启动,实例化所有实现了BeanFactoyPostPro ...

  6. spring bean 生命周期和 ? 作用域? spirng bean 相互依赖? jvm oom ? jvm 监控工具? ThreadLocal 原理

    1. spring bean 生命周期 1. 实例化一个bean ,即new 2. 初始化bean 的属性 3. 如果实现接口 BeanNameAware ,调用 setBeanName 4. Bea ...

  7. Spring点滴四:Spring Bean生命周期

    Spring Bean 生命周期示意图: 了解Spring的生命周期非常重要,我们可以利用Spring机制来定制Bean的实例化过程. -------------------------------- ...

  8. JSP 生命周期 理解JSP底层功能的关键就是去理解它们所遵守的生命周期

    JSP 生命周期 理解JSP底层功能的关键就是去理解它们所遵守的生命周期. JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成ser ...

  9. spring之生命周期

    1.容器中对的生命周期 spring可以管理 singleton作用域的bean的生命周期,spring可以精确地知道该bean何时被创建,何时被初始化完成,容器合适准备销毁该bean实例. spri ...

随机推荐

  1. 【比赛】HNOI2018 排列

    这题原题... 这题题面七绕八绕,有点麻烦,反正最后转化就是一棵树,每个点有一个值,要把所有点选完,要求选择一个点必须是它的父亲和祖先已经全部被选了,贡献是这个点的权值乘上它被选择的排名 如果一个点是 ...

  2. 【Luogu3676】小清新数据结构题(动态点分治)

    [Luogu3676]小清新数据结构题(动态点分治) 题面 洛谷 题解 先扯远点,这题我第一次看的时候觉得是一个树链剖分+线段树维护. 做法大概是这样: 我们先以任意一个点为根,把当前点看成是一棵有根 ...

  3. Unity3D手游开发日记(5) - 适合移动平台的植被随风摆动

    一直在思考怎么让场景更有生机,我觉得植被的随风摆动是必不可少的.CE3引擎的植被bending就做得特别棒.我也准备在手机上做一套. 先分析一下植被摆动常见的几种做法.其实不管哪种做法,核心就是让植被 ...

  4. Wifi密码破解实战

    原文链接地址:http://www.freebuf.com/articles/wireless/127261.html https://www.baidu.com/?tn=98012088_4_dg& ...

  5. HDU3507 print article【斜率优化dp】

    打印文章 时间限制:9000/3000 MS(Java / Others)内存限制:131072/65536 K(Java / Others) 总共提交:14521已接受提交:4531 问题描述 零有 ...

  6. The meterprter basic commonds

    Using Meterpeter commands Since the Meterpreter provides awhole new environment, we will cover some ...

  7. Zookeeper(二) zookeeper集群搭建 与使用

    一.zookeeper集群搭建 鉴于 zookeeper 本身的特点,服务器集群的节点数推荐设置为奇数台.我这里我规划为三台, 为别为 hadoop01,hadoop02,hadoop03    1. ...

  8. 美化mfc界面,给mfc界面加上皮肤

    注明:里面使用到的资源文件在自己的腾讯微云有. 原图: 添加皮肤后: 通过对比就能知道,加上皮肤后给人的感觉就是耳目一新了. 技术详细说明: 这里用到的是一个轻量型的美化工具SkinSharp又称Sk ...

  9. navicat for mysql 导出数据的坑

    navicat 选择转储结构和数据的时候,生成的 sql 文件会比较大,因为每一条数据都会生成一条 sql 语句,所以会导致 使用 source 还原的时候会很慢很慢很慢, 而使用 mysqldump ...

  10. c++构造是否要加大括号

    笔者被这个问题困扰良久,终于下决心看个究竟.废话不多说,先上结论: 如果对象是原生类型,加大括号会保证生成对象被初始化(一般是0) 如果对象非原生类型,加大括号或者不加,效果是一样的,都会执行该类的默 ...