2012-03-01 1 views
4

빈의 id 속성에서 SpEL을 사용할 수 있습니까?Bean id 속성에서 Spring EL을 사용할 수 있습니까?

예컨대 : 무엇 <bean id="#{T(com.om.m).PublicStaticFinalStringProperty}"...

가 작동하지 않습니다이 방법은, 내가 변경하거나 불가능해야합니까?

+0

나는 당신이 당신의 대답을 생각합니다. – duffymo

+0

@Bax 방금 micfra의 답변을 시도했지만 bean의 id는 리터럴이고 표현식의 결과가 아니라는 의미에서 작동하지 않는다고 생각합니다. 다른 결과를 보았습니까? 감사합니다. – Ittai

답변

2

이상하지만 가능합니다 (샘플은 스프링 3.1을 사용함). 다른 버전 일 : 불가능 :

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:util="http://www.springframework.org/schema/util" 
     xsi:schemaLocation=" 
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd 
      http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd 
     "> 

    <context:property-placeholder properties-ref="myProps"/> 

    <util:properties id="myProps" > 
     <prop key="x.y.z">possible</prop> 
    </util:properties> 

    <bean id="testBean" class="Bean"> 
     <property name="value" value="weird"/> 
    </bean> 

    <bean id="${x.y.z}" class="Bean"> 
     <property name="value" value="but"/> 
    </bean> 

    <bean id="#{testBean.value}" class="Bean"> 
     <property name="value" value="${x.y.z}"/> 
    </bean> 

</beans> 

Bean.java

public class Bean implements InitializingBean { 

    String value; 

    public void setValue(String value) { 
     this.value = value; 
    } 

    public void afterPropertiesSet() throws Exception { 
     System.out.println(value); 
    } 

} 
+1

방금 ​​코드를 시험해 보았습니다. 작동하지 않는 것이 두렵습니다. 나는 Bean이 BeanNameAware를 구현하고 컨텍스트가 전달하는 값을 출력하고 출력은 spel 리터럴이고 해석 된 표현이 아닙니다. 또한 스프링이 실제로 가능한 bean을 아는지 알아보기 위해'# {testBean.value}'value 속성에'# {$ {xyz} .value} '또는'# {possible.value}'값을 주입 해 보았습니다. bean의 해석 된 id). 그러나 이것은 모두 함께 실패합니다. – Ittai

+0

위의 코드는 매력처럼 작동합니다. context.xml, 빈 코드 및 사용중인 스프링의 버전을 게시하면 도움이 될 것입니다. 어쩌면 새로운 게시물로? – micfra