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







