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

建设服装网站目的商务电子是学什么的

建设服装网站目的,商务电子是学什么的,企业解决方案展示平台,用服务器ip可以做网站吗一、Spring 生命周期全景图 Spring 框架为 Bean 的生命周期管理提供了丰富而精细的控制机制,形成了一个完整的生命周期管理体系。这些机制可以划分为三大类: 初始化回调机制: PostConstruct 注解InitializingBean 接口自定义 init 方法 销毁…

一、Spring 生命周期全景图

Spring 框架为 Bean 的生命周期管理提供了丰富而精细的控制机制,形成了一个完整的生命周期管理体系。这些机制可以划分为三大类:

  1. 初始化回调机制

    • @PostConstruct 注解
    • InitializingBean 接口
    • 自定义 init 方法
  2. 销毁回调机制

    • @PreDestroy 注解
    • DisposableBean 接口
    • 自定义 destroy 方法
  3. 高级生命周期控制

    • Lifecycle 接口
    • SmartLifecycle 接口
    • Phased 接口
    • ApplicationListener 上下文事件

二、基础生命周期机制深度解析

1. @PostConstruct 与 @PreDestroy

实现原理

  • 基于 JSR-250 标准(Common Annotations)
  • CommonAnnotationBeanPostProcessor 处理
  • 采用反射调用标注方法

优势

public class Jsr250Example {private DataSource dataSource;@PostConstructpublic void prepareCache() {// 比构造函数更安全,所有依赖已注入this.dataSource.initCache();}@PreDestroypublic void clearSession() {// 标准的资源清理方式this.dataSource.cleanup();}
}

特点

  • 方法签名灵活(可带参数,可返回值)
  • 支持多个方法标注(执行顺序不确定)
  • 与框架解耦

2. InitializingBean 与 DisposableBean

架构设计

interface InitializingBean {+afterPropertiesSet()
}interface DisposableBean {+destroy()
}class CustomBean implements InitializingBean, DisposableBean

典型实现

public class BeanLifecycle implements InitializingBean, DisposableBean {private ThreadPoolExecutor executor;@Overridepublic void afterPropertiesSet() {// 确保线程池正确初始化this.executor = new ThreadPoolExecutor(...);}@Overridepublic void destroy() {// 优雅关闭线程池executor.shutdown();try {if (!executor.awaitTermination(60, SECONDS)) {executor.shutdownNow();}} catch (InterruptedException e) {executor.shutdownNow();Thread.currentThread().interrupt();}}
}

设计考量

  • 接口方式强制实现规范
  • 适合框架基础组件开发
  • 与 Spring 强耦合

三、扩展生命周期机制详解

1. 自定义 init/destroy 方法

XML 配置方式

<bean id="customBean" class="com.example.CustomBean"init-method="customInit"destroy-method="customDestroy"/>

Java 配置方式

@Bean(initMethod = "start", destroyMethod = "stop")
public Server server() {return new Server();
}

混合使用示例

public class MixedLifecycleBean {// 1. 最先执行@PostConstructpublic void annotationInit() { /*...*/ }// 2. 接着执行@Overridepublic void afterPropertiesSet() { /*...*/ }// 3. 最后执行public void xmlInit() { /*...*/ }// 销毁顺序相反@PreDestroypublic void annotationDestroy() { /*...*/ }@Overridepublic void destroy() { /*...*/ }public void xmlDestroy() { /*...*/ }
}

2. BeanPostProcessor 扩展点

自定义处理器示例

public class CustomPostProcessor implements BeanPostProcessor, Ordered {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) {if (bean instanceof Configurable) {((Configurable) bean).loadConfig();}return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) {if (bean instanceof Auditable) {((Auditable) bean).registerAudit();}return bean;}@Overridepublic int getOrder() {return Ordered.HIGHEST_PRECEDENCE;}
}

处理流程

  1. 构造函数调用
  2. 属性注入
  3. BeanPostProcessor.preProcessBeforeInitialization
  4. @PostConstruct
  5. InitializingBean.afterPropertiesSet
  6. 自定义 init 方法
  7. BeanPostProcessor.postProcessAfterInitialization

四、高级生命周期控制

1. Lifecycle 接口体系

核心接口

public interface Lifecycle {void start();void stop();boolean isRunning();
}public interface SmartLifecycle extends Lifecycle, Phased {boolean isAutoStartup();void stop(Runnable callback);
}public interface Phased {int getPhase();
}

典型应用场景

@Component
public class MQConsumer implements SmartLifecycle {private volatile boolean running = false;private ConsumerThread consumerThread;@Overridepublic void start() {this.consumerThread = new ConsumerThread();this.consumerThread.start();this.running = true;}@Overridepublic void stop(Runnable callback) {stop();callback.run(); // 必须执行以通知容器}@Overridepublic void stop() {this.consumerThread.shutdown();this.running = false;}@Overridepublic boolean isRunning() {return running;}@Overridepublic int getPhase() {return Integer.MAX_VALUE; // 最后启动,最先关闭}@Overridepublic boolean isAutoStartup() {return true;}
}

执行特点

  • 上下文刷新时自动启动(isAutoStartup=true)
  • 按 phase 值顺序启动,逆序关闭
  • 支持异步优雅关闭(stop(Runnable))

2. 应用事件监听机制

重要事件类型

  • ContextRefreshedEvent:上下文刷新完成
  • ContextStartedEvent:上下文启动
  • ContextStoppedEvent:上下文停止
  • ContextClosedEvent:上下文关闭

事件监听示例

@Component
public class ClusterManager implements ApplicationListener<ContextRefreshedEvent> {private final Object lock = new Object();private volatile boolean initialized = false;@Overridepublic void onApplicationEvent(ContextRefreshedEvent event) {synchronized (lock) {if (!initialized) {joinCluster();initialized = true;}}}@PreDestroypublic void leaveCluster() {// 离开集群逻辑}
}

五、实战中的最佳实践

1. 技术选型决策树

graph TDA[需要生命周期控制?] -->|是| B{需要初始化控制?}B -->|是| C[选择初始化机制]C --> D[是否需要解耦?]D -->|是| E[@PostConstruct]D -->|否| F[InitializingBean]C --> G[需要复杂处理?]G -->|是| H[BeanPostProcessor]A -->|是| I{需要销毁控制?}I -->|是| J[选择销毁机制]J --> K[是否需要解耦?]K -->|是| L[@PreDestroy]K -->|否| M[DisposableBean]A -->|需要精细控制| N[考虑SmartLifecycle]

2. 混合使用模式示例

public class ComprehensiveBean implements InitializingBean, DisposableBean, SmartLifecycle {// 初始化阶段@PostConstructpublic void initAnnotation() {log.debug("@PostConstruct 阶段");}@Overridepublic void afterPropertiesSet() {log.debug("InitializingBean 阶段");}@Bean(initMethod = "initMethod")public void initMethod() {log.debug("自定义init方法");}// 运行阶段@Overridepublic void start() {log.debug("Lifecycle 启动");}// 销毁阶段@PreDestroypublic void preDestroy() {log.debug("@PreDestroy 阶段");}@Overridepublic void destroy() {log.debug("DisposableBean 阶段");}@Bean(destroyMethod = "destroyMethod")public void destroyMethod() {log.debug("自定义destroy方法");}// SmartLifecycle 实现...
}

3. 常见陷阱与解决方案

问题1:重复初始化

  • 现象@PostConstructafterPropertiesSet 都执行相同逻辑
  • 解决:将初始化逻辑拆分到不同方法,或只使用一种机制

问题2:销毁顺序错误

  • 场景:数据库连接池比DAO先关闭
  • 方案:使用 @DependsOn 或实现 Phased 接口控制顺序

问题3:原型Bean的销毁

  • 注意:Spring 不管理原型Bean的销毁
  • 方案:使用 ObjectFactory 或手动注册销毁回调

六、Spring Boot 中的增强特性

1. @EventListener 扩展

@Component
public class LifecycleEventProcessor {@EventListener(ContextRefreshedEvent.class)public void onRefresh() {// 上下文刷新处理}@EventListener(ContextClosedEvent.class)public void onClose() {// 上下文关闭处理}
}

2. CommandLineRunner 与 ApplicationRunner

@Component
@Order(1)
public class DataLoader implements CommandLineRunner {@Overridepublic void run(String... args) {// 应用启动后执行}
}

3. Spring Boot Actuator 端点

management:endpoint:health:show-details: alwaysendpoints:web:exposure:include: health,info,shutdown

七、性能考量与最佳实践

  1. 生命周期方法的性能影响

    • 避免在初始化回调中执行耗时操作
    • 长时间任务考虑异步执行
  2. 内存泄漏防护

    @PreDestroy
    public void cleanup() {// 必须释放以下资源:// 1. 线程池// 2. 文件句柄// 3. 网络连接// 4. 静态集合引用// 5. 监听器注册
    }
    
  3. 测试策略

    @SpringBootTest
    class LifecycleTest {@Autowiredprivate ConfigurableApplicationContext context;@Testvoid testLifecycleSequence() {// 测试初始化顺序context.stop(); // 测试销毁逻辑}
    }
    

八、总结:生命周期机制的选择矩阵

需求场景推荐方案理由
简单的资源初始化@PostConstruct低耦合,标准规范
框架组件的强制初始化InitializingBean明确接口契约
复杂的多步骤初始化BeanPostProcessor细粒度控制
需要顺序控制的组件SmartLifecycle + Phased精确控制启动/关闭顺序
外部资源连接管理@PreDestroy + DisposableBean双重保障资源释放
应用启动后的业务初始化CommandLineRunnerSpring Boot 最佳实践
需要优雅关闭的长时间服务SmartLifecycle.stop(Runnable)支持异步关闭

理解并合理运用 Spring 的生命周期机制,可以帮助开发者构建更加健壮、易于维护的应用程序。根据具体场景选择适当的生命周期控制策略,是成为 Spring 高级开发者的重要标志之一。

http://www.dtcms.com/wzjs/561991.html

相关文章:

  • 网站建设好发信息网祺越网站建设
  • 建设银行网站为什么进不去开发一个卖东西的网站多少
  • 微信公众号可以做几个微网站吗英文网站建设easy
  • 优秀国外网站工程建设信息网站接口
  • 网站开发工具的选择网站开发工作流审批流
  • 常州网站设计制作淘宝网店网站建设目的
  • 北京网站设计定制开发建设公司wordpress的静态页面保存在哪里
  • 简述电子商务网站的内容设计与开发域名是什么意思呢
  • 主题资源网站建设 反思中山外贸网站建设
  • 计算机考试模拟网站怎么做网站反链数
  • 怀来网站建设甘肃省建设厅网站质监局
  • it类网站wordpress下载按钮插件
  • 电子商务网站盈利模式怎么用链接进自己做的网站吗
  • 好的漂亮的淘宝客网站模板开发工程师是程序员吗
  • qq头像网站源码wordpress插件教程
  • 石家庄营销型网站建设公司建设营销型网站公司
  • 品牌手机网站开发哪家好按照商业模式
  • 装修网站建设摘要扶贫网站建设
  • 个人网站 目的企业展厅设计施工
  • 常州市城乡建设学院网站百度关键词热度查询工具
  • 网站建设项目设计的图片做造价在那个网站比较好
  • 校园网站建设方案书微课网站建设项目
  • 网站系统分类网站建设属于什么职位
  • 网站备案都审核什么资料有点尴尬诶该页无法显示wordpress
  • 酒店网站建设案例策划书怎么写广州招聘网站制作
  • 张家界企业网站制作厦门 外贸商城网站制作
  • 网站建设ftp软件有哪些建站快车的使用方法
  • 做舞台灯光的在哪些网站接订单呢找做网站的公司好
  • 广州品牌网站建设网络品牌推广
  • 网站制作怎么把网站交付网页版微信二维码加载失败