2014-01-13 2 views
1

두 인터페이스 모두 공통 인터페이스를 구현하는 응용 프로그램에서 작업하고 있습니다. 그래서 bean 선언시, app-context.xml 파일에서 그 중 하나를 기본으로 표시하려고합니다. 이제스프링 컨텍스트 : 부울 값의 속성 자리 표시 자

<bean id="oracleImpl" class="com.me.dao.OracleImpl" primary="true"> 
</bean> 

내가 오히려 기본 빈을 할 참/거짓 값을 읽고 싶은 것입니다 콩의 하드 코드 싶지 않은 : 나는 단순히이 같은 기본 빈을 선언하여이 작업을 수행 할 수 있습니다 특성 파일에서. 그래서 같이 간 :

<context:property-placeholder location="classpath:jdbc.properties"/> 

<bean id="oracleImpl" class="com.me.dao.OracleImpl" primary="${oracle.primary}"> 
</bean> 

<bean id="pgsqlImpl" class="com.me.dao.PgsqlImpl" primary="${pgsql.primary}"> 
</bean> 

oracle.primary 및 pgsql.primary의 값은 다른 JDBC (비 부울) 특성과 함께 파일 jdbc.properties에 정의되어 있습니다.

그러나이 일을하고 말한다하지 않습니다,

나는 XSD 유효성 검사기 함께 할 수있는 뭔가 느낌이 " '$ {oracle.primary은}' '부울'에 대한 유효한 값이 아닙니다." 이 사이트와 구글을 통해 브라우징이 나에게 많은 생각을 주었지만 실제 해결책은 없었습니다. 어떤 몸도 도와 줄 수 있습니까?

+0

'com.me.dao.OracleImpl'의 ** 기본 ** 입력란 설정자는 어떻게 생겼습니까? – jasonoriordan

+0

primary는 'com.me.dao.OracleImpl'의 필드가 아닙니다. 그것은 @ 스프링 어노테이션 @primary와 동일합니다. 동일한 클래스의 빈이 여러 개인 경우 자동 배선의 기본 후보로 선언하는 데 사용됩니다. –

답변

2

이것은 작동하지 않습니다.

  • 부모 이름
  • 빈 클래스 이름
  • 공장 콩 이름
  • 팩토리 메소드 이름
  • : 3.2.5.RELEASE의로

    는 다음 bean 정의 elemets 속성의 자리 표시자를 지원 범위
  • 속성 값
  • indexe D 생성자 인수
  • 일반 생성자 인자

은 자세한 내용은 BeanDefinitionVisitorvisitBeanDefinition 방법을 참조하십시오. 이 방법은 PlaceholderConfigurerSupport에서 사용됩니다.

spring issue management system에 기능 요청을 만드는 것이 좋습니다.

추신 : 문제를 생성하는 경우 문제 URL에 의견을 추가하십시오.

+0

설명해 주셔서 감사합니다. 당신은 어떤 일을 제안 할 수 있습니까? –

+1

@waiting_for_peace 소스 코드를 면밀히 살펴본 결과, 쉽게 할 수있는 방법이 없다고 말해야합니다. 그 이유는'BeanDefinition'의 주요 속성은'boolean' 타입입니다. 따라서 xml 속성 값은 이미 'BeanDefinition' 객체가 생성 될 때 해석됩니다. 따라서 자신 만의'PropertyPlaceholderConfigurer'를 구현할 수 없습니다. 어쩌면 당신은 당신 자신의'DefaultListableBeanFactory'를 구현하고'isPrimary' 메소드를 오버라이드 할 수 있습니다. 그렇지 않으면 구현 한 특별한'BeanDefinitionParserDelegate'를 사용하도록 spring을 알려줄 수 있습니다. 행운을 빕니다 :) –

+0

시간 내 주셔서 감사합니다 :) 당신이 정말로 나를 도와 주려고 열심히 노력했지만, 나는 이것에 익숙하지 않아서 이번에는 하드 코딩 된 방법으로 이번에 갈 것이라고 생각합니다. 다시 한번 감사드립니다. –