[SPRING] Spring Java Configuration - enum에서 bean으로의 참조를 만드는 방법 - 참조
SPRINGSpring Java Configuration - enum에서 bean으로의 참조를 만드는 방법 - 참조
자바 기반의 구성으로, enum을 빈 참조로 매핑하는 맵을 순수 자바 구성 (현재 XML 및 작동 중)에 있도록 변환하려고 시도하고 있지만 문서에서 아무것도 찾을 수없는 것 같습니다.
현재, 내 XML 그렇게;
<util:map id="colourHanders" key-type="com.example.ColourEnum"
value-type="com.example.ColourHandler">
<entry key="white" value-ref="whiteColourHandler"/>
<entry key="blue" value-ref="blueColourHandler"/>
<entry key="red" value-ref="redColourHandler"/>
</util:map>
나는 그것이 쉽지만 다시 Pure Java에서 이것을 표현하는 방법에 관한 주제를 찾을 수 없다 (그래서 나는 XML 설정 파일이 없다).
노트; ColourHandler 빈은 @Component 주석을 사용하여 생성됩니다 (예 : ..).
@Component
public class RedColourHandler implements ColourHander{
.....
}
colourHandlers의 맵은 그렇게 참조됩니다.
@Resource(name="colourHandlers")
private Map<ColourHandlerEnum, ColourHandler> colourHandlers;
감사,
이안.
해결법
-
==============================
1.아마도 다음과 같은 것을 원할 것입니다 :
아마도 다음과 같은 것을 원할 것입니다 :
@Configuration public class MyConfiguration { @Bean public Map<ColourEnum, ColourHandler> colourHandlers() { Map<ColourEnum, ColourHandler> map = new EnumMap<>(); map.put(WHITE, whiteHandler()); // etc return map; } @Bean public ColourHandler whiteHandler() { return new WhiteHandler(); } }
핸들러를 @Components로 유지해야하는 경우 구성 클래스에 자동 핸들링 할 수 있습니다.
@Configuration public class MyConfiguration { @Autowired private WhiteColourHandler whiteColourHandler; @Bean public Map<ColourEnum, ColourHandler> colourHandlers() { Map<ColourEnum, ColourHandler> map = new EnumMap<>(); map.put(WHITE, whiteColourHandler); return map; } }
-
==============================
2.이것은 실제로 매우 간단하지만 어떻게 알아야합니다.
이것은 실제로 매우 간단하지만 어떻게 알아야합니다.
@Autowired private ColourHandler whiteColourHandler; ... public Map<ColourEnum, ColourHandler> getColourHander() { Map<ColourEnum, ColourHandler> result = ...; map.put( ColourEnum.white, whiteColourHandler ); ... return map; }
비법은 콩을 설정에 삽입 할 수 있다는 것입니다.
-
==============================
3.허용 된 응답을 제외하고, 컴포넌트를 자동 와이어 링하는 대신, 평소와 같이 구성 클래스에서 Bean을 선언하고이를 Map Bean 메소드에 인수로 전달할 수 있습니다.
허용 된 응답을 제외하고, 컴포넌트를 자동 와이어 링하는 대신, 평소와 같이 구성 클래스에서 Bean을 선언하고이를 Map Bean 메소드에 인수로 전달할 수 있습니다.
@Configuration public class MyConfiguration { @Bean public Map<ColourEnum, ColourHandler> colourHandlers(ColourHandler whiteHandler) { Map<ColourEnum, ColourHandler> map = new EnumMap<>(); map.put(WHITE, whiteHandler); return map; } @Bean public ColourHandler whiteHandler() { return new WhiteHandler(); } }
또한 @Resource로 맵을 삽입 할 때 필드 이름이 Bean 정의와 동일한 명명 규칙을 따르는 경우 주석의 "name"매개 변수는 필요하지 않습니다.
즉 이것은 name 매개 변수없이 작동합니다.
@Resource private Map<ColourHandlerEnum, ColourHandler> colourHandlers;
그러나 이것은 그것을 요구할 것이다 :
@Resource(name="colourHandlers") private Map<ColourHandlerEnum, ColourHandler> handlers;
-
==============================
4.각 ColorHandler에 대해 고유 한 클래스 / @ Component를 이미 가지고 있기 때문에 Spring이 사용할 것을 알아낼 수 있습니다 (@Autowire 삽입이나 추가 생성 메소드가 필요 없음).
각 ColorHandler에 대해 고유 한 클래스 / @ Component를 이미 가지고 있기 때문에 Spring이 사용할 것을 알아낼 수 있습니다 (@Autowire 삽입이나 추가 생성 메소드가 필요 없음).
@Configuration public class MyConfiguration { @Bean public Map<ColourEnum, ColourHandler> colourHandlers( WhiteColourHandler whiteHandler, BlueColourHandler blueHandler, RedColourHandler redHandler) { Map<ColourEnum, ColourHandler> map = new EnumMap<>(); map.put(WHITE, whiteHandler); map.put(BLUE, blueHandler); map.put(RED, redHandler); return map; } }
from https://stackoverflow.com/questions/13293297/spring-java-configuration-how-do-create-a-map-of-enums-to-beans-references by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring 데이터 나머지에 목록을 게시하는 방법? (0) | 2019.04.04 |
---|---|
[SPRING] @Query 정의와 스펙을 하나의 Spring Data JPA 저장소 메소드에 결합 할 수 있습니까? (0) | 2019.04.04 |
[SPRING] 스프링 부트 2.0 애플리케이션이 schema.sql을 실행하지 않는 이유는 무엇입니까? (0) | 2019.04.03 |
[SPRING] XML 대신 java config를 사용하여 저장소 populator bean을 선언하는 방법? (0) | 2019.04.03 |
[SPRING] 싱글 톤의 여러 인스턴스를 만드는 봄? (0) | 2019.04.03 |