반응형
spring-boot @Conditional OnClass의 구조
정확히 어떻게@ConditionalOnClass
주석 작업?
제 목표는 특정 콩을 로드하는 것입니다.jar
이 클래스가 클래스 경로에 포함되어 있는 경우.
난 내가 주석을 달 수 있다고 생각했어@Bean
와 함께@ConditionalOnClass(MyService.class)
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
그 콩을 자동으로 연결할 수 있기 때문입니다.하지만 의존관계가 없는 사람은 그것을 건너 뛰어야 한다.
그러나 앱을 시작할 때 다음과 같은 오류가 발생합니다.
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을 만들려면 어떻게 해야 합니까?
Spring Documents:
존재해야 하는 클래스.이 주석은 클래스 바이트 코드를 로드하여 구문 분석되므로 최종적으로 클래스 경로에 없을 수 있는 클래스를 여기서 지정하는 것이 안전합니다.
하지만 오류 상태가 다릅니다...
잘 잡았다!
에 사용할 수 있습니다.@Bean
메서드 레벨이지만 이 경우 클래스를 String 리터럴로 지정해야 합니다.
@Bean
@ConditionalOnClass(name ="de.MyService")
public MyConditionalBean statistics() {
return new MyConditionalBean();
}
"why"는 아직 기억나지 않지만 Spring Boot 소스의 기존 코드에서 가져온 것입니다.
이제 클래스 이름이 배열이기 때문에 곱슬곱슬한 브런치를 사용할 수 있습니다.
//org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
@ConditionalOnClass({Jackson2ObjectMapperBuilder.class})
static class JacksonObjectMapperConfiguration {
JacksonObjectMapperConfiguration() {
}
@Bean
@Primary
@ConditionalOnMissingBean
ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
return builder.createXmlMapper(false).build();
}
}
언급URL : https://stackoverflow.com/questions/25789907/how-does-spring-boot-conditionalonclass-work
반응형
'sourcecode' 카테고리의 다른 글
설정된 Y축 범위를 다시 차트화합니다. (0) | 2023.03.10 |
---|---|
인텔리주 IDE 탑재 스프링 부트 핫스왑 (0) | 2023.03.10 |
ReactJS 콜 부모 메서드 (0) | 2023.03.10 |
cron 작업을 사용하여 wp cli 명령을 실행합니다. (0) | 2023.03.10 |
React에서 클릭 시 입력 텍스트 값을 얻는 방법JS (0) | 2023.03.10 |