2014-02-10 2 views
1

으로 나는 follofing 상황 INT "슈퍼 context.xml에"이 :초기화 봄 콩은 후반

가 지금은 여러 다른 프로젝트에서이 "슈퍼의 context.xml"를 사용하고 싶습니다.

public class SubConf ... { 
    ... 
    @Autowired 
    ee.Conf superConf; 
    ... 
    public void setConfloc(Resource res) { 
     superConf.addSubConf(res); 
    } 
    ... 
} 

문제 양자리을 다음과 같이

public class Conf ... { 
    ... 
    public void addSubConf(Resource res) { 
     //configuration resolving from res 
    } 
    ... 
} 

ee.SubConf가 뭔가 다음과 같이

<import resource="super-context.xml"/> 

<bean id="subConf1" class="ee.SubConf"> 
    <property name="confloc" value="classpath:ee/customconf1.sss" /> 
</bean> 

<bean id="subConf2" class="ee.SubConf"> 
    <property name="confloc" value="classpath:ee/customconf2.sss" /> 
</bean> 

... 

<bean id="subConfn" class="ee.SubConf"> 
    <property name="confloc" value="classpath:ee/customconfn.sss" /> 
</bean> 

ee.Conf가 뭔가 "하위의 context.xml은"이 말 컨텍스트로드. bean은 다음과 같은 순서로 초기화됩니다 (컨텍스트 파일의 순서에 따라). conf, service, subConf1, subConf2, ... subConfn

그러나 service bean은 실제로 모든 subConf bean에 의존합니다 (이것은 공제 할 수 없지만 문맥 정의 그 자체). subConf bean 정의 다음에 "sub-context.xml"에서 가져 오기가 추가되면 OK를로드합니다.

이유는 모듈성을 구현하고 있기 때문입니다. 가능한 한 늦게 bean을로드하도록 강제 할 수 있습니까 (예제에서는 "service"bean). 가능한 한 빨리 특정 유형의 bean을로드하십시오 (예에서 "subConf"bean). " sub-context.xml "은 부분적으로 원하는 모듈성을 없앱니다.

또는 이러한 유형의 모듈성을 달성하는 가장 순수한 방법은 무엇입니까?

답변

1

를 사용할 수 있습니다. SubConf은 (는) Conf에 의존해서는 안됩니다. Conf 개체에 SubConf 개체 컬렉션을 삽입하기 만하면됩니다.

public class Conf { 

    @Autowired 
    private List<SubConf> subconfs; 
} 

당신이 SubConfConf 클래스를 호출하는이 당신의 순환 종속성을 제거에 대한 필요성을 제거 그런 식으로.

autowiring에 대한 자세한 내용은 Spring reference guide을 참조하십시오.

+0

감사합니다. 내 문제가 정확하게 해결되었습니다. 나는 네가 주어진 방식으로 어떤 종류의 모든 콩을 autowire 수 있다는 것을 몰랐다. – Vampnik

1

당신은 내가 당신이 잘못된 방법으로 문제를 접근하고 있다는 말을 depends-on

<bean id="beanOne" class="foo.Bar" depends-on="beanTwo" /> 
+1

또는 @ DependsOn' –

+0

@Lance Java 나는 그것을 고려했지만 "super-context.xml"은 다양한 프로젝트에서 추가 될 사용자 정의 "하위 context.xml"을 인식하지 못한다. 따라서 "의존"할 확실한 콩이 전혀 없습니다. – Vampnik