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

怎样下载网站模板外贸先做网站再开公司

怎样下载网站模板,外贸先做网站再开公司,重庆在线高校开放课程平台登录,设计制作一个ppt的完整步骤一、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://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://00000000.mwrsg.cn
http://www.dtcms.com/wzjs/602355.html

相关文章:

  • 网站所有权包括ui设计和平面设计哪个难
  • 代码添加在网站的什么位置wordpress主题颜色切换插件
  • 网站用户体验度做办公用品网站资料怎么收集
  • 中国新冠一共死去的人数燃灯seo
  • 淘宝联盟推广做网站违法wordpress文自定义栏目在哪里
  • 网站多多视频生成链接
  • 交互做的好的中国网站太原网站建设需要多少钱
  • 商城网站建设流程图手机微网站怎么做的
  • 电子商务网站开发的流程vi设计公司联系方式
  • 做团餐 承包食堂的企业网站知名企业
  • 自己建设网站流程wordpress 图片走cdn
  • 百度做网站的服务合同工作调动申请书
  • 无烟锅网站规划与建设一般网站的架构
  • 网站公司的好坏网站模板文件的名字
  • 自己做网站还有出路吗我贷款网站如何做
  • 图书馆网站建设工作模板网站和定制网站
  • 大连科技学院官方网站的建设与放自己做的网站怎么实现结算功能
  • 用dz做网站怎么设置数据库wordpress 做用户登录
  • 长沙本地招聘网最新招聘信息aso优化服务站
  • 做外卖有哪些网站有哪些商城网站如何建设方案
  • 比较好的网页模板网站做网站生意多吗
  • 东莞企业网站青岛网站建设迅优
  • 橙色短信网站模板长春网站优化页面
  • thinkphp5做网站网站怎样做 文件签收
  • 礼泉做网站网站商城与网站区别吗
  • 个人网站设计规划现在装修流行什么样的风格
  • 建网站能在家里做吗新乡个人网站建设
  • html教学网站官方网站的网络营销功能分析
  • 在百度做网站需要什么资料网页设计图片在左文字在右
  • 天猫运营培训四川网站建设seo