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

地方新闻网站建设全国疫情最新名单

地方新闻网站建设,全国疫情最新名单,广东快速做网站公司,美工做的好的网站Spring Bean 的生命周期涉及多个阶段,从实例化到销毁,在开发中我们可以通过各种接口和注解介入这些阶段来定制化自己的功能。以下是详细的生命周期流程: 1. Bean 的实例化(Instantiation) 方式:通过构造函…

Spring Bean 的生命周期涉及多个阶段,从实例化到销毁,在开发中我们可以通过各种接口和注解介入这些阶段来定制化自己的功能。以下是详细的生命周期流程:


1. Bean 的实例化(Instantiation)

  • 方式:通过构造函数或工厂方法创建 Bean 的实例。
  • 触发条件:容器启动时,根据配置(如 @Component、XML 配置等)创建 Bean。
  • 关键点:此时 Bean 的属性尚未注入。

2. 属性赋值(Population of Properties)

  • 依赖注入:通过 @Autowired、Setter 方法、XML 配置的 <property> 等方式注入依赖。
  • 处理 @Value:解析并注入外部化配置(如 application.properties)。

3. Aware 接口回调

Bean 可以通过实现 Aware 接口获取容器信息:

  • BeanNameAware:获取 Bean 的名称。
  • BeanFactoryAware:获取 BeanFactory 实例。
  • ApplicationContextAware:获取 ApplicationContext 实例。
  • EnvironmentAware:获取环境变量和配置。
public class MyBean implements BeanNameAware {@Overridepublic void setBeanName(String name) {// 获取 Bean 的名称}
}

4. BeanPostProcessor 的前置处理

  • 接口BeanPostProcessor.postProcessBeforeInitialization()
  • 作用:在初始化方法(如 @PostConstruct)之前执行自定义逻辑。
  • 典型应用:AOP 代理的生成、监控埋点等。

5. 初始化(Initialization)

初始化逻辑按顺序执行:

  1. @PostConstruct 注解:JSR-250 标准,标记初始化方法。
  2. InitializingBean.afterPropertiesSet():Spring 提供的初始化接口。
  3. 自定义 init-method:通过 XML 或 @Bean(initMethod = "init") 指定。
public class MyBean {@PostConstructpublic void postConstruct() {// 初始化逻辑}public void init() {// XML 或 @Bean 指定的初始化方法}
}

6. BeanPostProcessor 的后置处理

  • 接口BeanPostProcessor.postProcessAfterInitialization()
  • 作用:在初始化方法之后执行自定义逻辑。
  • 典型应用:最终代理对象的包装(如 Spring AOP)。

7. Bean 就绪(Ready)

  • 此时 Bean 已完全初始化,可被应用程序使用。
  • 作用域影响
    • Singleton:容器中只有一个实例。
    • Prototype:每次请求都生成新实例(销毁需手动处理)。
    • 其他作用域(Request、Session 等):生命周期与会话或请求绑定。

8. 销毁(Destruction)

销毁逻辑按顺序执行:

  1. @PreDestroy 注解:JSR-250 标准,标记销毁方法。
  2. DisposableBean.destroy():Spring 提供的销毁接口。
  3. 自定义 destroy-method:通过 XML 或 @Bean(destroyMethod = "destroy") 指定。
public class MyBean {@PreDestroypublic void preDestroy() {// 销毁逻辑}public void destroy() {// XML 或 @Bean 指定的销毁方法}
}

完整生命周期流程图

实例化 → 属性注入 → Aware 接口 → BeanPostProcessor 前置处理 → 
@PostConstruct → InitializingBean → init-method → 
BeanPostProcessor 后置处理 → 使用中 → 
@PreDestroy → DisposableBean → destroy-method

扩展点与注意事项

  1. BeanFactoryPostProcessor
    • 在 Bean 定义加载后、实例化前修改 Bean 的定义(如修改属性值)。
  2. BeanDefinitionRegistryPostProcessor
    • 更早阶段注册额外的 Bean 定义。
  3. 作用域差异
    • Prototype Bean 的销毁需手动调用 ctx.getBeanFactory().destroyBean(bean)
  4. 循环依赖
    • 通过三级缓存解决(仅限 Singleton Bean)。

示例代码

public class LifecycleBean implements BeanNameAware, InitializingBean, DisposableBean {private String name;@Overridepublic void setBeanName(String name) {this.name = name; // BeanNameAware 回调}@PostConstructpublic void postConstruct() {System.out.println("@PostConstruct 方法");}@Overridepublic void afterPropertiesSet() {System.out.println("InitializingBean.afterPropertiesSet()");}public void customInit() {System.out.println("自定义 init-method");}@PreDestroypublic void preDestroy() {System.out.println("@PreDestroy 方法");}@Overridepublic void destroy() {System.out.println("DisposableBean.destroy()");}public void customDestroy() {System.out.println("自定义 destroy-method");}
}

通过理解 Spring Bean 的生命周期,我们可以更精准地控制 Bean 的初始化与销毁过程,优化资源管理和扩展框架功能。

http://www.shuangfujiaoyu.com/news/60212.html

相关文章:

  • 可以转app的网站怎么做公司宣传网页怎么做
  • 做网站编程要学什么杭州疫情最新消息
  • 工程项目编号查询系统郑州网站优化seo
  • 密云做网站网店推广分为哪几种类型
  • 自己做免费网站的视频杭州谷歌推广
  • 成都最近有什么病毒刷seo排名
  • 南同网站建设深圳市企业网站seo营销工具
  • 重庆会计之家是谁做的网站seo推广公司价格
  • 快速建立平台网站开发建站教程详解百度关键词优化排名技巧
  • 企业网站设计注意事项seo在线优化网站
  • 求职招聘网站排名前十名阿里云域名注册网站
  • 中国建设银行网站首页企业网站有什么
  • 制作网站几个步骤痘痘如何去除效果好
  • 高职院校优质校建设专栏网站什么样的人适合做策划
  • 网站开发算互联网公司吗自己做网站需要多少钱
  • 淄博网站建设费用制作网站用什么软件
  • 做网站代理怎么赚钱北京seo加盟
  • 做网站杭州软文500字范文
  • 海南网站建设哪家专业网址查询网站
  • 简单静态网站模板新软件推广平台
  • 美国日本韩国欧洲化妆品特点谷歌优化排名怎么做
  • 网站开发的技术问题seo推广是什么意思呢
  • 用asp做网站怎么美观win7最好的优化软件
  • 专业网站定制价格必应搜索引擎怎么样
  • 做ppt好的模板下载网站有哪些搜外友链
  • 专业做网站的网站seo分析报告案例
  • 做外贸收费的服装网站百度搜索推广登录入口
  • 高明网站设计上海网站制作开发
  • 西樵网站建设企业网站seo方案
  • 技术支持 石家庄网站建设网络推广工具有哪些