2016-11-13 2 views
0

xml에서 java config로 전환하려고합니다.여러 Config 클래스의 Java 구성과 동일한 주석 bean

우리는 코어 라이브러리를 가지고 있으며 코어 라이브러리를 사용하는 구현체를 가지고 있습니다. 또한 각 구현에는 webapp 및 cli가 있습니다. 구성을 모듈화하려고합니다. 특정 패키지에 대해 구성 요소 검색을 사용합니다. config 클래스에서 순환 종속성 문제가 발생했습니다. 여러 Java 구성 클래스로 작성된 Bean에 동일한 @Component를 주입해야합니다. 내 구성은 다음과 같습니다 :

@Configuration 
@ComponentScan(basePackages = {"my.components"}) 
@ImportResource({ 
     "classpath:data-access-config.xml" 
}) 
@PropertySource(value = "classpath:core.props", ignoreResourceNotFound = true) 
public class CoreAppConfig { 
    @Autowired 
    Environment env; 

    @Autowired 
    ComponentBean bean; 

    @Bean 
    public MyBean myBean() { 
     return new MyBean(bean); 
    } 
} 


@Configuration 
@Import({CoreAppConfig.class}) 
@PropertySource(value = "classpath:my-app.props") 
public class MyAppConfig { 
    @Autowired 
    Environment env; 

    @Autowired 
    ComponentBean bean; 

    @Bean 
    public MyBean2 myBean2() { 
     return new MyBean2(bean); 
    } 
} 


@Configuration 
@ComponentScan(basePackages = {"my.app.services"}) 
@Import({MyAppConfig.class, CoreAppConfig.class}) 
public class MyWebAppConfig { 
    @Autowired 
    Environment env; 

    @Autowired 
    MyAppConfig myAppConfig; 

    @Autowired 
    ComponentBean bean; 

    @Bean 
    public MyRestService myRestService() { 
     return new MyRestService(bean); 
    } 
} 

이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

1 옵션은 구성 요소 검색을 사용하지 않는 것입니다. 다른 사람?

편집 :

내가 점점 오전 예외는 BeanCurrentlyInCreationException이다. @Import ({CoreAppConfig.class}) 또는 MyAppConfig에서 @Autowired ComponentBean Bean을 제거하면 문제가 사라집니다.

편집 2 :

그래서 나는이 특정 콩 순환 종속성 문제라고 생각합니다. 나는 다른 콩들과 내가 원하는 것을 할 수있다.이 콩만이 나에게 문제를주고있다.

순환 종속성을 결정하는 데 유용한 정보가 있습니까?

편집 3 :

괜찮 그래서 범인을 알아 냈어요. CoreAppConfig에서 Bean MyPropsBean을 만듭니다. 그런 다음 MyAppConfig에서 동일한 MyPropsBean을 만듭니다. CoreAppConfig.MyPropsBeanMyAppConfig.MyPropsBean으로 대체하려고합니다. 이 문제는 모두 CoreAppConfigMyAppConfigComponentBean의 두 가지로 인해 발생합니다. 이 문제를 어떻게 해결할 수 있습니까? 콩을 무시하는 가장 좋은 방법은 무엇입니까?

+0

정확한 문제는 무엇입니까? IDE 경고와 같은 오류를 게시 할 수 있습니까? – GurV

+0

1. ** 가져 오기 **를 제거하면 구성이 병렬로로드되고 CoreAppConfig가 ** MyAppConfig ** -> ** Autowired **에 필요한 ** bean **을 생성하므로 얻을 수 없습니다. 오류. 2. ** MyAppConfig **에서 ** Autowired **를 제거하면 ** bean **에 대해 ** CoreAppConfig **와 같은 다른 설정을 볼 필요가 없습니다. –

+0

@ Gwwinder 빈을 재정의하는 최선의 방법에 대한 아이디어가 있습니까? – rodney757

답변

0

그래서 MyAppConfig 빈을 별도의 구성 클래스로 이동하여이 문제를 해결했습니다. 그런 다음 @PropertySources를 사용하고 동적 매개 변수를 전달하는 MyAppConfig 빈을 만듭니다.