Как точно работает аннотация @ConditionalOnClass
?Как работает spring-boot @ConditionalOnClass?
Моя цель - загрузить конкретный компонент только в том случае, если jar
, обеспечивающий этот класс, включен в путь к классам.
я, хотя я мог аннотировать @Bean
с @ConditionalOnClass(MyService.class)
и объявить зависимость в мавена как опционно:
<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
в зависимости должны получить, что боб автоматически подключается. Но любой, у кого нет зависимости, должен пропустить это.
Но когда я запустить приложение, я получаю следующее сообщение об ошибке:
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]
Так что я, вероятно, делать что-то неправильно. Как я могу затем создать компонент bean в зависимости от банок зависимости и классов, содержащихся в пути к классам?
С весны документы:
/**
* 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.
*/
Но ошибка заявляет разные ...
Если вы поместили его в класс верхнего уровня, я бы за исключением класса, который нужно было бы набрать во время загрузки класса. То есть при использовании класса. Использование этого в качестве строкового литерала предотвращает это. –