- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
@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();
}
现在,任何将 my-framework
作为依赖项的人都应该自动连接该 bean。但是任何没有依赖关系的人都应该跳过它。
但是当我启动应用程序时,我收到以下错误:
Caused by: java.lang.ClassNotFoundException: de.MyService.class
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702) ~[catalina.jar:7.0.50]
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547) ~[catalina.jar:7.0.50]
所以我可能做错了什么。然后如何根据依赖项 jar 和类路径中包含的类创建 bean?
来自 Spring 文档:
The classes that must be present. Since this annotation parsed by loading class bytecode it is safe to specify classes here that may ultimately not be on the classpath.
但错误状态不同...
最佳答案
好收获!
您可以在 @Bean
方法级别上使用,但在这种情况下,您必须将您的类指定为字符串文字:
@Bean
@ConditionalOnClass(name ="de.MyService")
public MyConditionalBean statistics() {
return new MyConditionalBean();
}
我不记得“为什么”了,但它来自 Spring Boot 源代码的现有代码。
关于java - spring-boot @ConditionalOnClass 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25789907/
例如,HttpEncodingAutoConfiguration使用@ConditionalOnClass(CharacterEncodingFilter.class)进行注释。 我对@Conditi
@ConditionalOnClass 注释究竟是如何工作的? 我的目标是仅当提供此类的 jar 包含在类路径中时才加载特定的 bean。 我认为我可以用 @ConditionalOnClass(My
我是一名优秀的程序员,十分优秀!