我知道 Spring Boot 有很多 @Conditional
注释,例如 @ConditionalOnBean
、@ConditionalOnClass
、@ConditionalOnProperty
,ConditionalOnWebApplication
。但我不知道这是如何工作的?
例如:
@Configuration
@ConditionalOnClass(MyBean.class)
public class MyConfiguration{
// omitted
}
我的理解是,只有当 MyBean
在我的类路径中可用时,才会加载 MyConfiguration
。但是,当编译器到达 @ConditionalOnClass(MyBean.class)
行时,如果 MyBean
类不在我的类路径中,它将如何编译和运行,它不会抛出编译器错误吗?一旦我在我的 eclipse 中添加这样的代码,我就会收到编译时错误。对不起,如果这是一个太基本的问题,但我不知道我缺少什么来理解。
最佳答案
Spring Boot 正在编译时包含许多可选的依赖项;所以当编译 Spring Boot 时,MyBean.class
在类路径中。
现在您的应用程序的类路径中可能没有 MyBean.class
,但它不会在运行时失败。这是因为处理 @ConditionalOnClass
注释的基础结构实际上会读取配置的字节码,并且只有在 MyBean.class
存在时才会加载它们。参见 @ConditionalOnClass
javadoc .
现在自动配置是一个广泛的学科,你可以学习more about this in this talk .
关于java - 条件注释在 Spring Boot 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46224199/