Rav*_*dje 8 java spring spring-boot
我正在尝试启动已使用此批注的springboot应用程序。当我尝试启动应用程序时,出现以下错误:
org.springframework.boot.autoconfigure.condition.OnBeanCondition $ BeanTypeDeductionException无法推断com.shutterfly.sbs.platform.SbsPlatformConfigurationClientConfig.getRestTemplate的bean类型
码:
@ConditionalOnMissingBean
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*sic 28
该@ConditionalOnMissingBean注释用于加载只有在定bean缺少一个bean:
@Bean
@ConditionalOnMissingBean(SomeBean.class)
public SomeBean otherBean(){
return new SomeBean();
}
Run Code Online (Sandbox Code Playgroud)
仅当上下文中不存在此类型的其他 bean 时,Spring 才会加载上述 bean。另一方面,如果应用程序上下文中已经存在SomeBean类型的 bean,则不会创建上述 bean。
此注释派上用场的一些用例是:
参考:https : //docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-auto-configuration.html
chi*_*oni 11
仅当指定的 bean 不存在时,我们@ConditionalOnMissingBean
才需要包含某个 bean。对于前。
让我们配置一个仅在尚未定义transactionManager
类型的 bean 时才加载的 bean :JpaTransactionManager
@Bean
@ConditionalOnMissingBean(type = "JpaTransactionManager")
JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory);
return transactionManager;
}
Run Code Online (Sandbox Code Playgroud)
要了解更多信息,请考虑这种情况。
假设在我的项目中我配置了一个 beanvideoDecoderService
@Bean
@ConditionalOnMissingBean(VideoDecoderService.class)
public videoDecoderService videoDecoderService(){
return new VideoDecoderService;
}
Run Code Online (Sandbox Code Playgroud)
它将做的是,无论谁使用我的项目都可以用他们自己的项目videoDecoderService
覆盖。videoDecoderService
如果他们不是自己编写的,videoDecoderService
那么将提供这个默认的。
该@ConditionalOnMissingBean
注解是一个 spring 条件注解,用于仅当 bean 不在应用程序上下文中时才注册它们。
请参阅文档:https : //docs.spring.io/spring-boot/docs/2.0.0.RELEASE/api/org/springframework/boot/autoconfigure/condition/ConditionalOnMissingBean.html
您不应该跳过文档中明确说明的部分:
该条件只能匹配到目前为止已由应用程序上下文处理的 bean 定义,因此,强烈建议仅在自动配置类上使用此条件。
后面接着说:
如果候选 bean 可能由另一个自动配置创建,请确保使用此条件的 bean 在
用相当简单的话来说,这可能意味着其他一些@Bean
自动配置引入的内容应该优先于您定义的配置。为此,您需要通过 正确设置这些配置的顺序。@AutoConfigureBefore
归档时间: |
|
查看次数: |
7850 次 |
最近记录: |