当前位置: 首页 > news >正文

计算机软件开发网站建设取什么名字网站招代理

计算机软件开发网站建设取什么名字,网站招代理,网站开发 英语词汇,网站自适应是什么做的欢迎来到我的博客#xff0c;代码的世界里#xff0c;每一行都是一个故事 Spring 应用上下文探秘#xff1a;生命周期解析与最佳实践 前言应用上下文的初始化过程1. 应用上下文的初始化过程#xff1a;2. 不同类型的 ApplicationContext 初始化流程#xff1a;2.1 Annotat… 欢迎来到我的博客代码的世界里每一行都是一个故事 Spring 应用上下文探秘生命周期解析与最佳实践 前言应用上下文的初始化过程1. 应用上下文的初始化过程2. 不同类型的 ApplicationContext 初始化流程2.1 AnnotationConfigApplicationContext2.2 ClassPathXmlApplicationContext2.3 GenericApplicationContext 3. 初始化流程的特点 BeanPostProcessor 与 BeanFactoryPostProcessorBeanPostProcessor定义与作用生命周期中的调用时机 BeanFactoryPostProcessor定义与作用生命周期中的调用时机 比较举例 bean生命周期中的事件1. Bean 生命周期中的事件2. Spring 事件机制的简介3. 自定义事件的实现与触发3.1 创建自定义事件类3.2 创建自定义事件监听器3.3 触发自定义事件 动态刷新和关闭应用上下文1. 刷新 ApplicationContext 的过程2. 优雅关闭 Spring Boot 应用 前言 在 Spring 的世界中每个 bean 都有其自己的生命周期就像每个角色都有自己的故事一样。今天我们将成为 Spring 的探险者深入探索应用上下文的生命周期解开其中的神秘面纱。或许你将在这段旅程中发现一些你从未见过的 Spring 魔法。 应用上下文的初始化过程 Spring 中的 ApplicationContext 是 Spring 框架中用于管理 Bean 的核心容器。它负责加载、配置和管理 Bean以及提供其他高级功能。ApplicationContext 的初始化过程和不同类型的 ApplicationContext 初始化流程如下 1. 应用上下文的初始化过程 ApplicationContext 的初始化主要包括以下几个阶段 资源定位Resource Loading ApplicationContext 首先会通过资源定位器ResourceLoader来加载配置文件或者其他资源。这些资源可以是 XML 配置文件、Java 配置类、注解等。 资源解析Resource Parsing 一旦资源加载完成ApplicationContext 将使用相应的资源解析器如 XmlBeanDefinitionReader、AnnotationConfigApplicationContext、GenericApplicationContext 等来解析这些资源。解析的结果是一组 BeanDefinition其中包含了 Bean 的定义信息。 Bean 的注册Bean Registration 解析完成后ApplicationContext 将解析得到的 BeanDefinition 注册到内部的 BeanFactory 中。BeanFactory 是 ApplicationContext 的基础负责管理 Bean 的生命周期、依赖关系等。 Bean 的实例化和初始化Bean Instantiation and Initialization 当应用程序首次请求某个 Bean 的时候BeanFactory 会负责实例化和初始化该 Bean。这包括调用构造函数、设置属性、调用初始化方法等。 Bean 的生命周期管理Bean Lifecycle Management ApplicationContext 负责监控 Bean 的生命周期包括调用 Bean 的初始化方法和销毁方法。在 Bean 的整个生命周期中ApplicationContext 可以触发各种事件。 2. 不同类型的 ApplicationContext 初始化流程 2.1 AnnotationConfigApplicationContext AnnotationConfigApplicationContext context new AnnotationConfigApplicationContext(); context.register(AppConfig.class); context.refresh();register(AppConfig.class)注册配置类。refresh()刷新容器触发容器的初始化。 2.2 ClassPathXmlApplicationContext ClassPathXmlApplicationContext context new ClassPathXmlApplicationContext(applicationContext.xml);ClassPathXmlApplicationContext(applicationContext.xml)通过 XML 文件初始化容器。 2.3 GenericApplicationContext GenericApplicationContext context new GenericApplicationContext(); new XmlBeanDefinitionReader(context).loadBeanDefinitions(applicationContext.xml); context.refresh();GenericApplicationContext()创建 GenericApplicationContext 对象。new XmlBeanDefinitionReader(context).loadBeanDefinitions(applicationContext.xml)通过 XmlBeanDefinitionReader 加载 XML 文件。context.refresh()刷新容器。 3. 初始化流程的特点 灵活性Spring 提供了多种类型的 ApplicationContext 实现以适应不同的应用场景。层级结构可以有多个 ApplicationContext 实例形成父子关系子容器可以访问父容器中的Bean。事件机制Spring 提供了丰富的事件机制允许Bean监听容器事件如上下文刷新或关闭。 BeanPostProcessor 与 BeanFactoryPostProcessor 在 Spring 框架中BeanPostProcessor 和 BeanFactoryPostProcessor 是两种强大的扩展点允许开发者在 Spring 容器实例化 Bean 之前后以及创建和初始化 Bean 工厂之后进行额外的处理。 BeanPostProcessor 定义与作用 BeanPostProcessor 接口定义了回调方法这些方法在 Spring 容器初始化 Bean 之前后被调用。它主要用于对 Bean 实例进行一些自定义处理比如检查 Bean 属性的正确性或者使用代理包装 Bean。 生命周期中的调用时机 BeanPostProcessor 的 postProcessBeforeInitialization 方法在 Bean 的初始化方法如 PostConstruct 注解的方法或者 init-method 定义的方法之前被调用。postProcessAfterInitialization 方法在 Bean 的初始化方法之后被调用。 BeanFactoryPostProcessor 定义与作用 BeanFactoryPostProcessor 是一个用于修改应用上下文的工厂配置的工厂后置处理器。它主要用于在容器实例化任何 Bean 之前读取配置元数据并可能修改它。它可以修改或添加 Bean 定义信息也常用于处理自定义配置文件。 生命周期中的调用时机 BeanFactoryPostProcessor 在容器加载了 Bean 的定义信息之后在 Bean 实例化之前被调用。这意味着 BeanFactoryPostProcessor 在所有的 Bean 定义都已加载到容器中但还没有实例化任何 Bean 时执行。 比较 执行时间BeanFactoryPostProcessor 在容器启动阶段执行处理 Bean 定义BeanPostProcessor 在容器创建 Bean 时执行处理 Bean 实例。作用范围BeanFactoryPostProcessor 对整个 Bean 工厂生效可影响所有 Bean 定义BeanPostProcessor 主要影响单个 Bean 实例。 举例 使用 BeanFactoryPostProcessor 可以修改 Bean 定义例如修改某个 Bean 的属性值。使用 BeanPostProcessor 可以在 Bean 初始化前后执行一些操作例如使用 AOP 代理包装一个对象。 在 Spring 的生命周期中这两个接口的正确使用可以大大增强应用的灵活性和可配置性。 bean生命周期中的事件 在 Spring 框架中Bean 的生命周期中包含了一系列事件开发者可以通过 Spring 的事件机制监听和处理这些事件。以下是关于 Bean 生命周期中的事件和 Spring 事件机制的简介以及如何实现和触发自定义事件 1. Bean 生命周期中的事件 在 Bean 的生命周期中主要涉及到以下几个事件 实例化前事件Before Instantiation 在 Bean 的实例化之前触发允许定制 Bean 的实例化过程。 实例化后事件After Instantiation 在 Bean 的实例化之后触发可以对实例进行进一步的定制。 属性设置事件Property Set 在 Bean 的属性设置注入阶段触发允许对属性进行额外的处理。 初始化前事件Before Initialization 在 Bean 的初始化之前触发常用于执行一些初始化前的逻辑。 初始化后事件After Initialization 在 Bean 的初始化之后触发通常用于执行一些初始化后的逻辑。 销毁前事件Before Destruction 在 Bean 被销毁之前触发允许执行一些清理操作。 2. Spring 事件机制的简介 Spring 事件机制基于观察者模式其中有两个核心接口ApplicationEvent 和 ApplicationListener。 ApplicationEvent定义了事件对象的基本结构通常通过继承该接口创建自定义事件。ApplicationListener监听器接口实现该接口的类可以处理特定类型的事件。 Spring 的 ApplicationEventPublisher 接口负责发布事件而 ApplicationEventMulticaster 负责将事件传递给注册的监听器。 3. 自定义事件的实现与触发 3.1 创建自定义事件类 import org.springframework.context.ApplicationEvent;public class CustomEvent extends ApplicationEvent {private String eventData;public CustomEvent(Object source, String eventData) {super(source);this.eventData eventData;}public String getEventData() {return eventData;} }3.2 创建自定义事件监听器 import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component;Component public class CustomEventListener implements ApplicationListenerCustomEvent {Overridepublic void onApplicationEvent(CustomEvent event) {System.out.println(Received custom event: event.getEventData());} }3.3 触发自定义事件 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Component;Component public class EventPublisher {Autowiredprivate ApplicationEventPublisher eventPublisher;public void publishCustomEvent(String eventData) {CustomEvent customEvent new CustomEvent(this, eventData);eventPublisher.publishEvent(customEvent);} }在上述代码中EventPublisher 类通过 ApplicationEventPublisher 发布自定义事件 CustomEvent而 CustomEventListener 则监听并处理该自定义事件。 这样当你调用 EventPublisher 的 publishCustomEvent 方法时会触发自定义事件监听器将收到并处理该事件。 动态刷新和关闭应用上下文 1. 刷新 ApplicationContext 的过程 刷新 ApplicationContext 是指在应用程序运行时重新加载配置、重新实例化 Bean并刷新内部状态。在 Spring 中刷新 ApplicationContext 的主要过程包括以下几个步骤 创建并配置 ConfigurableApplicationContext 在应用程序启动时首先创建一个 ConfigurableApplicationContext 的实例并进行配置。这可以通过不同的 ApplicationContext 实现类如 GenericApplicationContext、AnnotationConfigApplicationContext、ClassPathXmlApplicationContext 等。 注册 Bean 定义 将配置的 Bean 定义BeanDefinition注册到 ApplicationContext 中。这些定义可以通过 XML 配置文件、Java 配置类或注解来指定。 刷新 ApplicationContext 调用 ConfigurableApplicationContext 的 refresh() 方法触发 ApplicationContext 的刷新过程。在这个过程中将会实例化和初始化所有的 Bean并解析各种依赖关系。 发布刷新事件 在刷新过程完成后ApplicationContext 会发布刷新事件通知所有注册的监听器如事件监听器。 完成刷新过程 ApplicationContext 完成了刷新过程此时应用程序已经处于运行状态可以开始处理请求等操作。 2. 优雅关闭 Spring Boot 应用 Spring Boot 提供了一种优雅关闭应用程序的机制确保在应用关闭时执行一些清理工作。以下是实现优雅关闭的步骤 实现 DisposableBean 接口或定义自定义销毁方法 在需要进行清理工作的 Bean 上实现 DisposableBean 接口或者在 Bean 上使用 PreDestroy 注解定义自定义销毁方法。 import org.springframework.beans.factory.DisposableBean;public class MyBean implements DisposableBean {Overridepublic void destroy() throws Exception {// 执行清理工作} }注册关闭钩子Shutdown Hook 在 Spring Boot 应用程序中可以注册关闭钩子确保在关闭时执行清理操作。通常这可以通过在主类中调用 SpringApplication.addShutdownHook(true) 实现。 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication public class MyApplication {public static void main(String[] args) {SpringApplication app new SpringApplication(MyApplication.class);app.addShutdownHook(true);app.run(args);} }使用 Actuator 进行关闭 Spring Boot Actuator 提供了一组 REST 端点包括 /actuator/shutdown可以通过发送 POST 请求到该端点来关闭应用程序。 首先确保在 application.properties 或 application.yml 中开启 shutdown 端点 management.endpoints.web.exposure.includeshutdown然后可以通过发送 POST 请求到 /actuator/shutdown 端点来关闭应用程序 curl -X POST http://localhost:8080/actuator/shutdown通过上述步骤你可以在应用程序关闭时执行清理操作确保资源被正确释放。这对于处理数据库连接、缓存、消息队列等资源非常有用。
http://www.pierceye.com/news/573245/

相关文章:

  • 天津网站制作工具想自己做网站 有免费的吗
  • 宝塔织梦网站建设求网站备案照片
  • 聊城住房和城乡建设厅网站研发项目管理软件
  • 国投集团网站开发杭州网站界面设计
  • 做关于什么的网站莆田网站建设解决方案
  • 湖南长沙做网站那些网站可以做反链
  • 成都金牛网站建设公司高端网站配色
  • 做喜报的网站设计师的工作内容
  • 济南网站建设工作wordpress 资讯
  • 网站调用数据库平台公司名单
  • 移动网站怎么做成都设计公司名字
  • 杭州最好的网站设计公司服务器域名解析
  • 做试用网站的原理塘沽网吧开门了吗
  • 网站域名的作用古典网站源码
  • 做直播网站软件有哪些软件涿州网站建设有限公司
  • 易托管建站工具wordpress多个single
  • 建一个电影网站多大 数据库半厘米wordpress
  • 住房和建设厅网站首页网站源码怎么写
  • 宁波新亚建设公司网站简单网站建设
  • 做网站没赚到钱网站后台地址忘记了
  • 备案网站公共查询安阳县
  • wordpress 超级管理员seo优化网络公司
  • 商务推广网站宝塔做网站
  • 我想建一个网站怎么建python做的大型网站
  • 为网站设计手机版wordpress怎样比较安全
  • 网站优化方式重庆建设网站哪家专业
  • php做网站基本流程旅游网站论文
  • 网站前期准备网页制作需要学多久
  • 广园路建设公司网站建app网站要多少钱
  • 网站域名是什么东西wordpress农历插件