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

大数据开发是做什么的seo技术顾问阿亮

大数据开发是做什么的,seo技术顾问阿亮,网站建设基础 ppt,cms系统和网站后台系统一句话总结: ConditionalOnMissingBean 是 Spring Boot 提供的一个 条件注解(Conditional Annotation),意思是: 只有当 Spring 容器中 不存在 某个 Bean 时,当前的 Bean 或配置才会被加载。 这是一种典型的…

一句话总结:

@ConditionalOnMissingBean 是 Spring Boot 提供的一个 条件注解(Conditional Annotation),意思是:

只有当 Spring 容器中 不存在 某个 Bean 时,当前的 Bean 或配置才会被加载。

这是一种典型的“按需装配”策略,常用于自动配置类(Auto Configuration)中。

如果大家有看源码的习惯,会发现到处都有这个注解:

RestTemplate:

Jackson - ObjectMapper:

  • Spring Boot 默认提供的 JSON 解析工具 ObjectMapper

  • 如果你没自己定义一个,它就帮你创建一个默认的

  • 你可以完全覆盖它,比如配置命名策略、日期格式等

框架或者组件库想要提供一个默认实现,但又允许使用者自定义自己的实现。这个时候就可以使用 @ConditionalOnMissingBean。这就达到了 可扩展+默认兜底 的目的。

同理,还有个相对应的是:@ConditionalOnBean 

对比:@ConditionalOnBean vs @ConditionalOnMissingBean

注解含义
@ConditionalOnBean(SomeClass.class)只有当容器中存在 SomeClass 类型的 Bean 时才执行
@ConditionalOnMissingBean(SomeClass.class)只有当容器中不存在 SomeClass 类型的 Bean 时才执行

这两个注解是互补的,分别用于不同的场景。

支持的用法形式

@ConditionalOnMissingBean(SomeClass.class)                 // 类型判断
@ConditionalOnMissingBean(name = "someBeanName")           // 名称判断
@ConditionalOnMissingBean(value = SomeClass.class)         // 等价于上面的类型判断
@ConditionalOnMissingBean(type = "com.example.SomeClass")  // 用字符串形式避免类加载

你也可以组合使用,如:

@ConditionalOnMissingBean(value = SomeInterface.class,name = "customBean"
)

特别注意:

不能直接加在 @Component、@Service、@Controller 等用于直接注册 Bean 的注解上,因为 Spring 在解析这些注解时并不会走自动配置的判断逻辑,因此不会触发 @ConditionalOnMissingBean 的条件判断,最终会导致Bean 被强制注册或 注册失败报错!

代码示例

自定义一个接口:


public interface MyService {void hello();
}

错误示例

先来一个错误示例(直接在@Component下加上了):


@Slf4j
@Component
@ConditionalOnMissingBean(MyService.class)
public class MyServiceDefault implements MyService {@Overridepublic void hello() {log.info("use default bean...");}
}

 项目不会报错,直接启动后查找Bean:

会发现根本没注册上。所以,虽然加在@Component等注解的类上语法允许,但 Spring 不会进行条件判断和直接注册,可能导致意料之外的报错。所以不要这么用。

正确用法:

@Configuration + @Bean 的方式(大家回头看看我最上面截的源码截图中,也都是这种方式)


@Configuration
public class MyServiceAutoConfiguration {@Bean@ConditionalOnMissingBean(MyService.class)public MyService myService() {return new MyServiceDefault();}
}

默认实现类:


@Slf4j
public class MyServiceDefault implements MyService {@Overridepublic void hello() {log.info("use default bean...");}
}

找个地方调用一下:

public class StarApplication {@Autowiredprivate MyService myService;public static void main(String[] args) {SpringApplication.run(StarApplication.class, args);}@PostConstructpublic void test() {myService.hello();}
}

现在模拟用户实现了这个接口:


@Slf4j
@Component
public class MyServiceUser implements MyService {@Overridepublic void hello() {log.info("use self bean...");}
}

可以看到就一个Bean:

当然,你也可以去掉这个注解试试:

再次运行:

可以看到两个地方都注册上了。

http://www.dtcms.com/a/539810.html

相关文章:

  • 可以拿自己电脑做网站wordpress菜单怎么设置中文
  • 怎么做网络乞丐网站做直播网站找哪家网站
  • 成都美食网站设计论文网页界面设计时颜色越多越好
  • 网站建设商城商城网站建设多少钱o2o平台都有哪些
  • 摄影摄像网站建设海报在线设计生成器
  • h5网站快速搭建宿迁房产网签查询系统
  • 郑州专门做网站的公司有哪些做企业网站的合同
  • php网站开发外文文献深圳谷歌推广公司
  • 网站产品后台界面怎么做金宝贝早教中心网页界面设计
  • 丽水市建设局网站电工证做一个谷歌网站多少钱
  • 来宾市住房和城乡建设局网站怎样把html文件变成链接
  • 德州万企网站建设免费空间贴吧
  • 深圳h5网站公司网上书城网站建设目的
  • 小型培训机构网站开发毕业设计找室内效果图的网站
  • 宝山做网站价格建网站的设备
  • 东阳哪里可以做网站wordpress安装插件要求ftp
  • 建设网站公司怎么分工网页加载不出来怎么办
  • 南昌大型网站建设公司nas wordpress建站
  • 孝感做招聘信息的网站wordpress禁止抓分页
  • 网站建设学习步骤遵义在线读者板留言
  • 为什么要做响应式网站龙华做棋牌网站建设
  • chrome 谷歌浏览器怀化网站优化联系方式
  • 东莞长安营销型网站建设无忧建站
  • 贵阳市网站建设公司济南公司网站推广优化最大的
  • 佛山新网站建设公司WordPress出现归档
  • 网站怎样盈利深圳大眼睛网站建设
  • 新乡做网站企业邮箱注册申请免费注册126
  • 济南 网站建设那家好如何企业网站的软文
  • 余姚市城乡建设局网站wordpress安装主题失败
  • 多语言商城网站开发网站的建设心得