스프링 부트의 다중 변환 서비스
부팅 응용 프로그램이 있고 한 면에서 자동 배선을 시도합니다.conversionService
다음과 같이:
@Autowired
private ConversionService conversionService;
결과적으로 저는 다음과 같은 것을 얻습니다.
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [org.springframework.core.convert.ConversionService] is defined: expected single matching bean but found 3: mvcConversionService,defaultConversionService,integrationConversionService
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1061)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:949)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533)
... 16 more
이 문제를 해결하기 위해 다음과 같은 한정자를 추가했습니다.
@Autowired
@Qualifier("mvcConversionService")
private ConversionService c;
그리고 이것은 모두 효과가 있습니다.그러나 모든 사용자 지정 변환기가 자동으로 에 추가됩니다.mvcConversionService
그리고 이제 저는 그것을 연장하고 싶습니다.ConversionService
그리고 그것에 다른 방법을 추가하지만, 내 변환기는 다시 그것에 추가됩니다.mvcConversionService
스프링 부츠에 어떤 것이 있는지 알려줄 방법이 있습니까?conversionService
자동으로 변환기를 등록하는 데 사용할 수 있습니까?모든 변환기를 새 변환기로 수동으로 나열하지 않습니다.conversionService
.
저도 비슷한 문제를 겪고 있었습니다.사용할 변환 서비스를 정의해야 하는 것이 문제인 것 같습니다.XML 또는 Spring Boot 구성을 사용하여 이 작업을 수행할 수 있습니다.
저는 매우 유사한 질문(제게 효과가 있었던 질문)에 대한 답변의 일부를 여기에 복사하고 이 질문을 중복 가능성이 있는 것으로 표시합니다.
Spring 문서를 살펴보면 다음과 같이 선언해야 합니다.
ConversionService
XML 구성에서는 다음과 같이 표시됩니다.<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <set> <bean class="example.MyCustomConverter"/> </set> </property> </bean>
사용자가 찾고 있는 변환기 목록에서 모든 변환기가 목록에서 자동 배선할 수 있는 동일한 인터페이스를 구현하는 경우.
예.
@Service
public class MyService {
@Autowired
private List<MyConverter> myConverters;
public void myMethod(MyRawThing thing) {
myConverters
.forEach(converter -> converter.doStuff(thing));
}
}
필요에 따라 중간 정도로 반복합니다.
이 기능의 좋은 점은 새로운 구현이 추가될 때 이를 사용하는 코드를 업데이트할 필요가 없다는 것입니다.
설명.
Spring은 응용 프로그램에 대한 변환 서비스(mvcConversionService)를 자동으로 생성하려고 시도합니다.등록할 변환기에 대한 한정자가 없으므로 다음 유형 중 하나를 구현하는 구성 요소/빈을 생성하면 서비스에 자동으로 등록됩니다.
- 변환기
- 일반 변환기
- 프린터
- 파서
솔루션 #1
무시해요.이러한 변환기를 mvcConversionService에 등록해도 문제가 없다면 이 제한 사항을 해결할 시간이 없을 수도 있습니다.변환기 클래스가 사용되지 않을 수 있습니다.
솔루션 #2
자신의 인터페이스를 복제합니다.ConversionService 및 Converter의 인터페이스를 복사하고 원하는 이름을 지정할 수 있습니다.물론 기능은 동일하지만 Converter 클래스가 다른 ConversionService 인스턴스에 주입되는 것을 방지합니다.
Spring Integration에서도 이 문제를 겪고 있었기 때문에 이 문제에 부딪쳐 보십시오.나는 이 해결책에 만족하지 않지만 이것은 빠른 해결책입니다.
@Configuration
public class ConversionServiceConfiguration {
@Bean
@Primary
public ConversionService rewardBoxConversionService(@Qualifier("mvcConversionService") final ConversionService conversionService) {
return conversionService;
}
}
일부 논리에 대해 다른 ConversionService 구현이 필요한 경우 문제가 발생합니다.그러나 이는 @Qualifier 주석을 사용하여 해결할 수 있습니다.
언급URL : https://stackoverflow.com/questions/28111599/multiple-conversionservices-in-spring-boot
'sourcecode' 카테고리의 다른 글
조건이 충족되는 경우 Numpy 요소 교체 (0) | 2023.07.22 |
---|---|
일부 행을 업데이트하는 동안 고유 키 무시(mariaDB) (0) | 2023.07.22 |
C에서 인쇄 매크로 디버그? (0) | 2023.07.22 |
C#에서 파이썬 스크립트를 실행하려면 어떻게 해야 합니까? (0) | 2023.07.17 |
R의 벡터 목록에서 행렬을 만들려면 어떻게 해야 합니까? (0) | 2023.07.17 |