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

电商网站开发步骤百度网首页

电商网站开发步骤,百度网首页,科技资讯,asp.net做报名网站在使用 Spring Boot 开发企业项目或中台框架时,我们经常会遇到这样的需求: 如果用户没有手动配置 Bean,就提供默认实现;如果某个功能配置项为 true,才启用该功能;如果引入了某个三方依赖,才自动…

在使用 Spring Boot 开发企业项目或中台框架时,我们经常会遇到这样的需求:

  • 如果用户没有手动配置 Bean,就提供默认实现;
  • 如果某个功能配置项为 true,才启用该功能;
  • 如果引入了某个三方依赖,才自动配置其支持。

这些背后的逻辑,靠的就是 Spring Boot 的条件装配机制(Conditional Auto Configuration)

本文就带你了解一下条件装配的核心注解和使用方法。

什么是条件装配?

条件装配是一种基于“是否满足某些条件”来决定 Bean 是否注册到 Spring 容器的机制。

通过条件装配,我们可以让框架或模块根据环境动态控制哪些 Bean 被注入,实现高度的灵活性、可插拔性。

常见的条件装配注解

注解作用场景示例
@ConditionalOnMissingBean当 Spring 中不存在某个 Bean时注册当前 Bean提供默认实现
@ConditionalOnBean当 Spring 中存在某个 Bean时才注册依赖其他 Bean
@ConditionalOnProperty配置文件中有指定 key 且值满足条件控制功能开关
@ConditionalOnClassclasspath 中存在某个类判断是否引入某个 jar
@ConditionalOnExpression使用 SpEL 表达式判断更复杂的控制条件
@ConditionalOnWebApplication当前应用是 Web 类型Web 专属配置
@ConditionalOnNotWebApplication非 Web 应用时生效通用应用配置

下面详细将两个我比较常用的:

重点 1:@ConditionalOnMissingBean

容器中没有某个类型的 Bean时,才注册当前 Bean,常用于默认实现。

@Configuration
public class MyAutoConfiguration {
​@Bean@ConditionalOnMissingBean(MyService.class)public MyService myService() {return new DefaultMyService();}
}

注意:

不能加在 @Component 类上!会绕过条件判断。

// 这个写法条件不会生效!
@Component
@ConditionalOnMissingBean(MyService.class)
public class DefaultMyService implements MyService { ... }

重点 2:@ConditionalOnProperty

基于配置文件中是否存在某个属性,以及其值是否匹配来控制 Bean 的注册。只有满足某个配置条件,才加载这个配置类或 Bean

@Configuration
@ConditionalOnProperty(prefix = "my.interceptor",name = "enabled",havingValue = "true",matchIfMissing = false
)
public class MyInterceptorAutoConfiguration {...
}

参数解释(这是重点):

参数名作用
prefix表示你定义的配置前缀,比如在 application.yml 中写的 my.interceptor.enabled
name配置项的名称(搭配 prefix 使用)
havingValue配置项的值为这个时,才成立
matchIfMissing为true的时候,如果用户根本没配置这个值,也算成立。也就是为ture等于默认开启

比如 你的配置文件这样写:

my:interceptor:enabled: true

那么这段 @ConditionalOnProperty 会生效,于是 @Configuration 类就会被加载,里面的拦截器、响应体处理器之类的 Bean才会被注册。

这是 Starter 模块设计中非常重要的可选开关机制,可以让用户自由决定是否启用你封装的功能。

很多我们常用的组件经常都有这种开关:

feign:

prometheus:

swagger:

另外,这些注解可以组合使用。

示例:组合使用

有时候我们希望配置生效还要保证 Bean 没有被覆盖,可以组合使用:

@Bean
@ConditionalOnMissingBean(MyService.class)
@ConditionalOnProperty(name = "my.feature.enabled", havingValue = "true", matchIfMissing = true)
public MyService defaultMyService() {return new DefaultMyService();
}

这段代码的意思是:

只有当 application.yml 中配置了 my.feature.enabled=true,并且容器中没有自定义的 MyService 实现,才使用这个默认实现。

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

相关文章:

  • 国外做ic的网站网络营销模式案例
  • 公司用员工信息做网站域名备案资源优化网站排名
  • 100个网页设计模板衡阳seo服务
  • 丹东谁家做网站百度关键词推广可以自己做吗
  • 泰州网站制作软件seo有名气的优化公司
  • wordpress站点目录网络做推广广告公司
  • 门户网站建设 总结百度快速排名提升
  • wordpress响应式网站模板网站分析培训班
  • 传奇游戏排行榜官网seo关键词排名系统
  • 刚做的网站搜索不到站内推广方式
  • 合肥的网站建设公司哪家好网络平台怎么推广
  • 福建漳州网站建设哪家便宜小程序开发公司排行榜
  • 做网站插入音乐用什么下载一份完整的活动策划方案
  • 三网合一 网站建设汕头百度网站排名
  • 小网站建设公司排名网站搜索排名优化
  • 怎么可以自己制作网站竞价托管服务公司
  • 哈尔滨网络兼职网站建设网络营销运营公司
  • 贪玩原始传奇官方网站百度推广外推联系方式
  • 用花生棒做网站快吗微信朋友圈广告推广代理
  • 网站建设税收分类编码杭州产品推广服务公司
  • 企业网站的建立网络虚拟社区时对于企业济南网络优化哪家专业
  • 有了域名就可以做网站了吗昆明seo建站
  • 免费做代理的网站关键词排名seo优化
  • 学做网页的网站百度推广图片
  • 网站分站代理如何在微信上做推广
  • 纺织面料做哪个网站好网络营销公司注册找哪家
  • 手机网站制作服务机构站长之家备案查询
  • 企业网站商城自己开平台怎么弄啊
  • 阳谷做网站引擎网站
  • 龙岩做网站开发大概价格公司网站设计