Java spring boot@ConditionalOnClass是如何工作的?
Java spring boot@ConditionalOnClass是如何工作的?,java,spring,spring-boot,Java,Spring,Spring Boot,@ConditionalOnClass注释是如何工作的 我的目标是仅当类路径中包含提供该类的jar时加载特定bean 我认为我可以用@ConditionalOnClass(MyService.class)注释@Bean,并在maven中将依赖项声明为可选: <dependency> <groupId>de.my</groupId> <artifactId>my-framework<artifactId> <
@ConditionalOnClass
注释是如何工作的
我的目标是仅当类路径中包含提供该类的jar
时加载特定bean
我认为我可以用@ConditionalOnClass(MyService.class)
注释@Bean
,并在maven中将依赖项声明为可选:
<dependency>
<groupId>de.my</groupId>
<artifactId>my-framework<artifactId>
<optional>true</optional>
</dependency>
@Bean
@ConditionalOnClass(MyService.class)
public MyConditionalBean statistics() {
return new MyConditionalBean();
}
所以我可能做错了什么。然后,如何根据依赖项jar和类路径中包含的类创建bean条件
从spring文档中:
必须出现的类。由于此批注已由解析
加载类字节码在这里指定可能
最终不在类路径上
但是错误状态不同…捕捉得好
可以在@Bean
方法级别上使用,但在这种情况下,必须将类指定为字符串文本:
@Bean
@ConditionalOnClass(name ="de.MyService")
public MyConditionalBean statistics() {
return new MyConditionalBean();
}
我已经记不起“为什么”,但它来自于Spring Boot源代码的现有代码。如果将它放在顶级类中,我会在类加载时将其拉入。这是在使用类的时候。将其用作字符串文字可以防止这种情况。注意,如果它是在类级别声明的,则不必是字符串文字。算了吧。
@Bean
@ConditionalOnClass(name ="de.MyService")
public MyConditionalBean statistics() {
return new MyConditionalBean();
}