8
@ConditionalOnClass
주석은 정확히 어떻게 작동합니까?스프링 부트 @ConditionalOnClass는 어떻게 작동합니까?
내 목표는이 클래스를 제공하는 jar
이 클래스 경로에 포함되어있는 경우에만 특정 bean을로드하는 것입니다.
@ConditionalOnClass(MyService.class)
와
@Bean
주석과 옵션으로 받는다는에서 종속성을 선언 할 수 있지만 : 의존성 등
<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.
*/
그러나 오류가 다른 상태 ...
최상위 클래스에 넣으면 수업 로딩 시간에 가져올 클래스를 제외하고 싶습니다. 그것은 수업을 사용할 때입니다. 이를 문자열 리터럴로 사용하면이 문제를 방지 할 수 있습니다. –