Wie funktioniert die spring-boot @ConditionalOnClass Arbeit?

Wie genau funktioniert das @ConditionalOnClass annotation Arbeit?

Mein Ziel ist zum laden einer bestimmten bean nur, wenn die jar bietet diese Klasse ist im classpath.

Ich dachte, die könnte ich kommentieren @Bean mit @ConditionalOnClass(MyService.class) und zu erklären, die Abhängigkeit in der maven-optional:

<dependency>
    <groupId>de.my</groupId>
    <artifactId>my-framework<artifactId>
    <optional>true</optional>
</dependency>

@Bean
@ConditionalOnClass(MyService.class)
public MyConditionalBean statistics() {
    return new MyConditionalBean();
}

Nun, jeder, der my-framework als Abhängigkeit bekommen sollte, die bean automatisch verdrahtet. Aber wer nicht mit der Abhängigkeit sollte es zu überspringen.

Aber wenn ich starten Sie die app, bekomme ich die folgende Fehlermeldung:

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]

So, ich bin wahrscheinlich etwas falsch zu machen. Wie kann ich dann schaffen die Bohne bedingte auf das dependency-jars und die Klassen in den classpath?

Aus der Feder docs:

Den Klassen, die vorhanden sein muss. Da diese Annotationen analysiert
be-class-bytecode ist es sicher um Klassen angegeben werden, hier kann
letztlich nicht auf dem classpath.

Aber die Fehlermeldung heißt anders...

InformationsquelleAutor membersound | 2014-09-11
Schreibe einen Kommentar