2011-11-27 1 views
1

스프링 클래스에 문제가 있습니다. 나는 다른 클래스에 그것들을주기 위해 Configuration 클래스 안에 모든 타입의 Bean들을 가져야한다.구성 클래스 내의 getBeansOfType

문제는 지금 내가 시작하지 않는 한 ApplicationContext 시작하지 않는 한 그렇게 할 수 없다. 내가 호출하는 구성 클래스를 사용하기 때문에 Config 클래스를 사용하기 때문에 무한 루프가 발생한다. ..

예를 들어

:

@Configuration 
@Import(Calling.class) 
public class MyConfig{ 
@Bean 
public ExampleClass aBean(){ 
... 
return aObject; 
} 
} 

@Configuration 
@Import(MyConfig.class) 
public class Calling{ 

@Bean 
public Foo anotherBean(){ 
ConfigurableApplicationContext ctx = new AnnotationConfigApplicationContext(myConfig.class); 
ctx.getBeansOfType(ExampleClass.class); 
return aObject; 
} 
} 

어떤 기능이나 패턴 난이 콩을 얻을하는 데 사용할 수 있는가?

답변

3

@Configuration을 사용하면 빈번히 이러한 무한 루프가 발생하기 때문에 컨텍스트에서 빈을 "끌어 오지"않도록주의해야합니다.

대신을 시도해보십시오

@Configuration 
@Import(Calling.class) 
public class MyConfig { 
    @Bean 
    public ExampleClass aBean() { 
     ... 
     return aObject; 
    } 
} 

@Configuration 
public class Calling { 

    private @Autowired List<ExampleClass> exampleBeans; 

    @Bean 
    public Foo anotherBean() { 
     return aObject; 
    } 
} 

이 선언적 접근 방법은 희망 무한 루프 문제를 해결 받아야합니다.

또한 주기적으로 @Import을 피해야합니다. 위의 예와 같이 한 방향으로 만 수행하십시오.

+0

좋아 (그렇지 않으면 그것은 순환 종속성 가능하면 제거하는 것이 가장 것) , 꽤 잘 보이지만 : 나는'MyConfig' 클래스에 의존하기 때문에'Calling' 클래스를 만들 수 없다 ... 내가 시작할 때 My App, MyConfig 클래스가로드 된 후'Calling'이 임포트된다. 그러나이 시점에서' MyConfig'가 아직 존재하지 않으므로'Calling'은'ExampleClasses'를 원하지만 여기서는 실패합니다 ... – reox

+1

i 이제이 방법으로 해결했습니다 : 나는 List List를 만들고 빈 목록으로 초기화했습니다. 또한'@ Autowired' 메소드'setList (List )'를 만들었습니다. 이 클래스에서는 'List.addAll (Collection)'메서드를 사용하여 내용을 설정합니다. List는 Spring에 의해 작성된 후에도 모든 사용 메소드에서 사용할 수 있습니다. – reox