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

乳山网站开发北京seo公司华网白帽

乳山网站开发,北京seo公司华网白帽,建筑工程网络数据安全管理系统,flv网站建设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.hkea.cn/news/315179/

相关文章:

  • 备案做电影网站吗yandx引擎入口
  • 网站双倍浮动百度账号登陆入口
  • 聊城市网站建设网站推广排名
  • 帝国新闻网站模板百度seo推广怎么做
  • 预约做港澳证的网站网站排名在线优化工具
  • 罗湖实惠的网站建设费用成都官网seo厂家
  • 建设部官方网站有哪些优帮云排名优化
  • 天津做网站找谁新东方在线教育平台官网
  • 南宁做网站在哪了日本预测比分
  • 咋样查看网站用什么编程语言做的9个广州seo推广神技
  • 网站链接太多怎么做网站地图谷歌广告
  • 网站关键词更新临汾网络推广
  • 个人做网站靠什么盈利免费网站建设模板
  • 网站开发 打标签aso优化怎么做
  • 教育校园网站建设方案seo每天一贴
  • 怎么看网站的建设时间推广公司品牌
  • 营销型网站有什么特点英语培训机构
  • 学院网站的系统建设方式宝鸡网站seo
  • 网站客户端怎么做的百度一下了你就知道官网
  • 有什么推广方法优化大师电脑版官方
  • 自己做网站的服务器上海网站建设公司排名
  • 跳蛋塞逼做多的视频网站百度广告联盟官网
  • 房地产网站开发文档企业查询
  • 做emu对网站有什么要求十大免费无代码开发软件
  • 扬州专业做网站做关键词优化
  • 宿州网站建设贰聚思诚信网站服务器
  • 用照片做模板下载网站好百度爱采购官方网站
  • 微网站建设套餐网络营销是做什么的
  • 徐州有哪些做网站苏州网站建设费用
  • 统一企业信息管理系统网站直通车怎么开效果最佳