2009-09-19 4 views
1

예를 들어, 봄 설정에서 나는이 방법 -은 스프링 설정 파일에서 값을 얻는 것은 직접

private String getFruitName(){ 
    /* result should come from config depending on the 
     value of this.fruit [a fruit type which can be one 
     of the first four keys in the map.] */ 
} 

이 지금 this-

<util:map id="someMap" 
    map-class="java.util.HashMap" 
    key-type="java.lang.String" 
    value-type="java.lang.String" > 
    <entry key="A" value="Apple" /> 
    <entry key="B" value="Banana" /> 
    <entry key="C" value="Cherry" /> 
    <entry key="D" value="Durian" />   
    <entry key="Default" value="None" /> 

같은지도가 클래스의 메소드에서 키를 주입하여 값을 가져 오는 대신 스프링 구성 파일로 설정된 조건을 사용하여 직접 어떻게 수행합니까? 구성에서 조건문을 사용할 수 있으며 어쩌면 구성에 매개 변수를 전달할 수 있습니까? 당신은 봄이 작업을 수행하지 할

if (someMap.containsKey(fruit)){ 
    fruitName = someMap.get(fruit); 
} 

답변

2

-

내가 좋아하는 뭔가를하고 싶지 않아요.

스프링은 콩에 구성 및 기타 콩을 제공하지만, 이런 논리를 제공하는 용도로 사용되지 않습니다. someMap.get이 작동하는 방식이거나, 적절한 과일을 콩에 바로 주입하는 것입니다.

1

Bean에서 단순히 속성을 선언 할 수 있으므로 Spring 구성을 사용하여 Bean의 속성을 설정할 수 있으므로이 작업을 수행해서는 안됩니다.

이유를 불문하고이 작업을 수행해야하는 경우 Spring은 Spring 구성에 대한 다양한 액세스 레벨을 얻기 위해 구현할 수있는 인터페이스 세트를 제공합니다. 기본 인터페이스는 ApplicationContextAware입니다. 이 인터페이스를 구현하면 Bean은 (setApplicationContext(ApplicationContext) 메서드를 호출하여) 초기화하는 동안 응용 프로그램 컨텍스트를 전달할 수 있습니다. 그러면 컨텍스트에 프로그래밍 방식으로 액세스하기 위해 컨텍스트를 저장하고 메서드를 호출 할 수 있습니다.

지도에 실제로 액세스하려면 getBean() 메서드를 ApplicationContext (상속 된 BeanFactory)으로 간단히 호출하여지도의 bean id를 전달합니다. 예를 들어

:

private String getFruitName(){ 
    Map someMap = (Map)applicationContext.getBean("someMap"); 

    return (String)someMap.get(this.fruit); 
} 

당신이 Spring 컨텍스트의보다 구체적인 액세스를 구현할 수있는 몇 가지 다른 인터페이스가 있습니다, 일반적으로 당신이 할 수있는 경우보다 구체적인 ResourceLoaderAware, ApplicationEventPublisherAware 또는 MessageSourceAware 인터페이스를 구현하는 것이 바람직하다 .

이러한 인터페이스 중 하나를 구현하면 더 이상 POJO가없고 스프링과 결합된다는 것을 알아 두십시오. 그렇게하기 전에주의 깊게 생각하십시오.

관련 문제