r.r*_*r.r 2 java spring spring-boot
有spring boot 2.0.2配置
@Configuration
public class ApiConfig {
@Bean
@Profile("!tests")
@ConditionalOnProperty(name = "enabled", havingValue = "true")
public MyService service() {
return new MyServiceImpl();
}
}
Run Code Online (Sandbox Code Playgroud)
...以及一些控制器,只有在初始化 MyService bean 时才应该创建并添加到应用程序上下文中。
@RestController
@ConditionalOnBean(MyService.class)
public class MyController {
@Autowired
private MyService service;
}
Run Code Online (Sandbox Code Playgroud)
它工作正常。但偶尔春季启动会跳过 MyController 创建。根据日志 MyService 被创建,但在任何其他 bean(包括所有控制器)之后,最后。
为什么 boot@Configuration之前不处理bean @RestController?谢谢。
为什么引导不在@Controller 之前处理@Configuration bean?谢谢。
因为 Spring 并不能保证这一点。
以及本规范中@ConditionalOnBean关于此类问题的警告:
该条件只能匹配到目前为止已由应用程序上下文处理的 bean 定义,因此,强烈建议仅在自动配置类上使用此条件。如果候选 bean 可能是由另一个自动配置创建的,请确保使用此条件的那个 bean 之后运行。
并且您不在自动配置类中使用注释。您确实在用@RestController.
我认为,要实现你的要求,你应该移动@RestController的bean声明@Configuration的是威盛的进口类EnableAutoConfiguration中的条目spring.factories。
| 归档时间: |
|
| 查看次数: |
5461 次 |
| 最近记录: |