条件注释如何在Spring Boot中工作?

SR *_*han 9 java spring spring-boot

据我所知,春天引导有很多@Conditional像注释,@ConditionalOnBean,@ConditionalOnClass,@ConditionalOnProperty,ConditionalOnWebApplication.但我不知道这是怎么回事?

例如:

@Configuration    
@ConditionalOnClass(MyBean.class)
public class MyConfiguration{
    // omitted       
}
Run Code Online (Sandbox Code Playgroud)

我理解的是,MyConfiguration只有MyBean在我的类路径中可用时才会加载.但是,如果MyBean类不在我的类路径中,当编译器到达@ConditionalOnClass(MyBean.class)行时,它将如何编译和运行,不会抛出编译器错误?一旦我在我的eclipse中添加这样的代码,我就会遇到编译时错误.对不起,如果这是一个非常基本的问题,但我不知道我错过了什么.

Bri*_*zel 9

正在编译Spring Boot,其中包含许多可选的依赖项; 因此,当编译Spring Boot时,MyBean.class它位于类路径上.

现在,您的应用程序可能没有MyBean.class在其类路径中,但它在运行时不会失败.这是因为处理@ConditionalOnClass注释的基础结构实际上将读取配置的字节码,并且只有MyBean.class在存在时才加载它们.见@ConditionalOnClassjavadoc.

现在,自动配置是一个广泛的主题,您可以在本次演讲中了解更多相关信息.