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

网站建设骗子网站排名优化

网站建设骗子,网站排名优化,高端大气网站推荐,网站建设怎么设置留言界面Spring Boot 提供了丰富的扩展点(Extension Points),允许开发者在应用生命周期的不同阶段插入自定义逻辑。这些扩展点不仅简化了开发流程,还体现了 Spring 团队的核心设计思想,如 “约定优于配置”(Convent…

Spring Boot 提供了丰富的扩展点(Extension Points),允许开发者在应用生命周期的不同阶段插入自定义逻辑。这些扩展点不仅简化了开发流程,还体现了 Spring 团队的核心设计思想,如 “约定优于配置”(Convention over Configuration)“开闭原则”(Open/Closed Principle)“控制反转”(Inversion of Control, IoC)

本文将深入探讨 Spring Boot 扩展点的 设计背景、实现细节、适用场景最佳实践,帮助你更高效地使用 Spring Boot 进行开发。


1. 为什么 Spring Boot 提供这些扩展点?

Spring Boot 的设计目标之一是 减少样板代码,同时提供 灵活的扩展机制。这些扩展点的设计考虑了以下因素:

1.1 核心设计思想

  1. 控制反转(IoC)与依赖注入(DI)

    • Spring 的核心思想是 由框架管理 Bean 的生命周期,而不是开发者手动创建。
    • 扩展点(如 @PostConstructApplicationListener)允许开发者在 Bean 生命周期的特定阶段插入逻辑。
  2. 开闭原则(OCP)

    • Spring Boot 的许多功能(如自动配置)对扩展开放,对修改封闭
    • 例如,CommandLineRunner 允许你在不修改 Spring Boot 源码的情况下,添加启动任务。
  3. 约定优于配置(CoC)

    • Spring Boot 提供了默认行为(如自动扫描 @SpringBootApplication),但允许通过扩展点覆盖默认逻辑。
    • 例如,EnvironmentPostProcessor 可以动态修改配置,而不需要改 application.properties
  4. 模块化与可插拔性

    • 通过扩展点(如 AutoConfigurationHealthIndicator),Spring Boot 允许开发者 按需启用或禁用功能,而不会影响核心流程。

2. 核心扩展点详解

2.1 应用启动后执行任务

(1) CommandLineRunner & ApplicationRunner
  • 设计目的
    提供一种 标准化的方式,在应用启动后执行初始化任务(如加载缓存、初始化数据库)。
  • 实现细节
    • Spring Boot 在 SpringApplication.run()最后阶段 调用所有 CommandLineRunnerApplicationRunnerrun() 方法。
    • 默认按 @OrderOrdered 接口排序执行。
  • 最佳实践
    • 适用于 非阻塞式 初始化任务(如日志打印、缓存预热)。
    • 避免执行 长时间阻塞 的任务(如远程服务调用),否则会延迟应用启动。
@Component
@Order(1) // 控制执行顺序
public class CacheInitializer implements CommandLineRunner {@Overridepublic void run(String... args) {// 初始化缓存}
}
(2) ApplicationListener<ApplicationReadyEvent>
  • 设计目的
    基于 Spring 事件机制,提供更灵活的启动后处理(如检查依赖服务是否可用)。
  • 实现细节
    • ApplicationReadyEvent最后一个启动事件,表示应用已完全就绪。
    • 适用于需要 访问已初始化的 Bean 的场景(如检查数据库连接)。
  • 最佳实践
    • CommandLineRunner 更灵活,可以监听多种事件(如 ContextRefreshedEvent)。
    • 适合 异步任务(如发送启动通知)。
@Component
public class StartupNotifier implements ApplicationListener<ApplicationReadyEvent> {@Overridepublic void onApplicationEvent(ApplicationReadyEvent event) {// 发送应用启动成功通知}
}

2.2 Bean 生命周期控制

(1) @PostConstruct & @PreDestroy(JSR-250)
  • 设计目的
    提供标准的 Bean 初始化和销毁钩子,替代 XML 配置的 init-methoddestroy-method
  • 实现细节
    • @PostConstruct依赖注入完成后 调用。
    • @PreDestroyBean 销毁前 调用(如应用关闭时)。
  • 最佳实践
    • 适用于 资源初始化(如建立连接池)和 清理工作(如关闭线程池)。
@Service
public class MyService {@PostConstructpublic void init() {// 初始化逻辑}@PreDestroypublic void cleanup() {// 释放资源}
}
(2) InitializingBean & DisposableBean(Spring 接口)
  • 设计目的
    Spring 原生提供的生命周期接口,功能与 @PostConstruct/@PreDestroy 类似。
  • 最佳实践
    • 优先使用 @PostConstruct(更符合 Java 标准),除非需要兼容旧代码。
@Service
public class MyService implements InitializingBean, DisposableBean {@Overridepublic void afterPropertiesSet() { // 初始化}@Overridepublic void destroy() { // 销毁}
}

2.3 动态获取 Bean

(1) ApplicationContextAware
  • 设计目的
    允许非 Spring 管理的对象(如工具类)访问 ApplicationContext
  • 实现细节
    • Spring 会在 Bean 初始化时调用 setApplicationContext() 方法。
  • 最佳实践
    • 尽量避免使用(破坏 IoC 原则),优先使用依赖注入。
@Component
public class SpringContextHolder implements ApplicationContextAware {private static ApplicationContext context;@Overridepublic void setApplicationContext(ApplicationContext ctx) {context = ctx;}public static <T> T getBean(Class<T> clazz) {return context.getBean(clazz);}
}
(2) @Autowired + @Qualifier
  • 最佳实践
    • 优先使用构造函数注入(不可变、易测试)。
@Service
public class OrderService {private final PaymentService paymentService;@Autowired // Spring 4.3+ 可省略public OrderService(@Qualifier("wechatPay") PaymentService paymentService) {this.paymentService = paymentService;}
}

3. 高级扩展点

(1) 自定义自动配置(AutoConfiguration

  • 设计目的
    允许开发者封装通用逻辑(如 Starter 开发),实现 “开箱即用”
  • 实现细节
    • 通过 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 注册配置类。
    • 使用 @Conditional 控制条件装配(如 @ConditionalOnClass)。
  • 最佳实践
    • 确保自动配置 幂等(多次调用不影响结果)。
    • 提供 @EnableXXX 注解,允许用户显式启用。
@AutoConfiguration
@ConditionalOnClass(DataSource.class)
public class MyDataSourceAutoConfiguration {@Beanpublic DataSource dataSource() {return new HikariDataSource();}
}

(2) 环境配置扩展(EnvironmentPostProcessor

  • 设计目的
    动态修改环境变量(如解密敏感配置)。
  • 实现细节
    • application.properties 加载后、Bean 初始化前执行。
  • 最佳实践
    • 适用于 动态配置(如从远程配置中心加载)。
public class DecryptConfigProcessor implements EnvironmentPostProcessor {@Overridepublic void postProcessEnvironment(Environment env, SpringApplication app) {String password = env.getProperty("db.password");env.getPropertySources().addFirst(new DecryptedPropertySource("decrypted", decrypt(password)));}
}

4. 总结与最佳实践

扩展点适用场景最佳实践
CommandLineRunner启动后任务(非阻塞)避免长时间任务,用 @Order 控制顺序
@PostConstructBean 初始化逻辑优先于 InitializingBean
ApplicationListener事件驱动逻辑(如启动通知)监听 ApplicationReadyEvent 而非 ContextRefreshedEvent
EnvironmentPostProcessor动态修改配置尽早执行(在 Bean 初始化前)
AutoConfiguration开发自定义 Starter使用 @Conditional 确保灵活性

核心思想

  • “约定优于配置”:默认行为够用,但允许覆盖。
  • “控制反转”:框架管理生命周期,开发者聚焦业务。
  • “开闭原则”:通过扩展点增强功能,而非修改源码。

通过合理使用这些扩展点,可以构建 高可维护、可扩展 的 Spring Boot 应用。

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

相关文章:

  • 湛江市住房建设局网站疫情最新消息今天
  • 网站项目策划书方案免费网站seo排名优化
  • 匠王红木在那个网站做众筹青岛网站排名推广
  • 网站seo诊断工具seo网站排名优化公司
  • vue 做电商网站中国最好的营销策划公司
  • 做网站企业贵阳网站建设
  • 网站建设的原则有哪些qq群怎么优化排名靠前
  • 网站空间ip查询人民政府网站
  • 赣州网站建设中心杭州seo渠道排名
  • 网站建设栏目添加百度知道灰色词代发收录
  • 网站备案怎么查好f123网站
  • 有个网站经常换域名百度关键词检测工具
  • 广州响应网站建设站长平台网站
  • 百度做销售网站多少钱网推软件有哪些
  • 网站在线支付接口申请搜索引擎优化推广
  • 公司做网站的费用如何记账比较好的品牌策划公司有哪些
  • 什么系统做购物网站好友情链接平台站长资源
  • 263邮箱个人登录口seo排名首页
  • 知名的网站建设公司seo研究院
  • 网站菜单导航怎么做百度竞价排名服务
  • asp.ney旅游信息网站下载 简洁google官方下载app
  • 作图网站都有哪些怎么做电商生意
  • java开发面试题seo优化宣传
  • 广东做网站的公司资阳市网站seo
  • 网站推广系统合肥新闻 今天 最新消息
  • 做美食的网站网站推广常用方法
  • 电子商务类网站模板青岛网站建设公司哪家好
  • 电子商务网站开发技术支持电子商务网站建设规划方案
  • 怎样做阿里巴巴网站seo推广灰色词
  • 网站建设的流程该怎么确定站长友情链接平台