2013-12-14 5 views
1

Java에서 정의 된 MyRealClass와 MyMockClass라는 두 클래스가 있다고 해봅시다. 둘 다 동일한 인터페이스, 즉 MyInterface를 구현합니다.스프링을 사용하는 자바 런타임 객체 생성

지금은이 같은 조건 (내 스프링 구성 XML 파일에 사용할 수있는 변수)를 기반으로하거나 클래스의 객체를 인스턴스화해야합니다

if ${env} = 'A', then do, MyInterface mObj = new MyMockClass(...), 
if ${env} = 'B', then do, MyInterface mObj = new MyRealClass(...), 

가 어떻게 이것을 달성합니까? 조건부 빈을 통해이 작업을 수행 할 수 있습니까?

도와주세요.

답변

1

@Profile annotation of Spring과 같은 것을 찾고 있다고 생각합니다. 이 방법을 사용하면 두 가지 유형의 bean bean 유형 MyInterface을 가질 수 있으며 프로그램 시작시 profile 매개 변수를 전달하여 적절한 값을로드 할 수 있습니다.

귀하의 XML은 다음과 같이 보일 것이다 :

:

<beans profile="A"> 
    <bean id="myMock" class="MyMockClass" /> 
</beans> 
<beans profile="B"> 
    <bean id="myReal" class="MyRealClass" /> 
</beans> 

를 그런 다음, 시스템 프로퍼티 -Dspring.profiles.active=A 사용하여 응용 프로그램을 시작하거나 웹 응용 프로그램에있는 경우 web.xml에 직접 지정해야

<context-param> 
    <param-name>spring.profiles.active</param-name> 
    <param-value>A</param-value> 
</context-param> 
0

서버 가동 시간에 두 객체를 설치하고 Spring Bean 팩토리를 사용하여 환경 기준으로 객체를 삽입 할 수 있습니다.

If(env==='A'){ 
MyInterface mObj = SpringFactory.getBean("id defined in xml for mock clas") 
}else if((env==='B'){ 
MyInterface mObj = SpringFactory.getBean("id defined in xml for real class") 
} 
0

스프링의 개념은 Profile입니다.

오이 당신은 또한 당신은 당신의 bean 정의를 배치 할 수있는

<bean id="myClassFactory" class="MyClassFactory"> 
    <property name="myObject" ref="myClass${env}" /> 
</bean> 

<bean id="myClassA" class="MyMockClass" lazy-init="true" /> 
<bean id="myClassB" class="MyRealClass" lazy-init="true" /> 

처럼, 다른 콩에 그들을 배치 후 lazy-init="true"와 함께 두 개의 콩을 작성하여 다음 방금 MyClassFactory.getMyObject()

1

를 호출 할 필요가 있다고 할 수있다 다른 구성 파일에 저장하고 env 변수에 따라 구성을 가져옵니다.

<import resource="classpath:beans_${env}.xml" /> 

는 다음 두 가지 (또는 그 이상)했을 beans_*.xml 파일 (beans_a.xmlbeans_b.xml)

: 메인 스프링 설정 XML의

는 다음 가져 오기를 추가합니다

관련 문제