복붙노트

[SPRING] 다중 모듈 스프링 구성은 어떻게합니까?

SPRING

다중 모듈 스프링 구성은 어떻게합니까?

다중 모듈 (maven) 스프링 빌드가 있습니다. 모든 모듈은 일부 빈을 공개하고, 대부분 종속성 그래프에서 정의 된 빈을 소비합니다. 대부분은 주석으로 선언 된 bean이지만 거의 모든 모듈에도 하나 또는 두 개의 xml 선언 된 bean이 있습니다.

우리는 반쯤 괜찮은 해결책을 가지고 있지만이 시나리오에서 xml 파일을 구성하는 데 올바른 / 최적의 방법이 무엇인지 궁금합니다. 모듈간에 가져 오기를 사용합니까 아니면 다른 방법이 있습니까? 당신은 모든 XML 파일을 하나의 장소에 두거나 의존성 그래프에 따라 주변에 전파합니까? 솔루션이 부분적인 스프링 컨텍스트 (일반적인 통합 테스트)를 어떻게 처리합니까?

또한 IDE의 스프링 지원을 최적으로 활용할 수있는 방법 (IDEA 및 일부 Eclipse 사용자)을 구성하고 싶습니다.

해결법

  1. ==============================

    1.우리는 모듈에서 와일드 카드로 된 import를 사용하여 다른 모듈이 import를 선언 한 모듈에 bean을 제공 할 수 있도록합니다 :

    우리는 모듈에서 와일드 카드로 된 import를 사용하여 다른 모듈이 import를 선언 한 모듈에 bean을 제공 할 수 있도록합니다 :

    <import resource="classpath*:com/acme/**/*-core-support.xml" />
    

    "호스트"에 기여하고자하는 모듈은 src / main / resources / com / acme에 올바르게 이름 붙여진 파일을 자동으로 가져와야합니다. classpath 스캐닝을 사용하면 (에 의해 더 쉽게 될 것이다).

    이와 관련하여 도움이되는 또 다른 사항은 특정 유형의 빈을 선택하여 다시 ApplicationContext에서 다시 게시하는 작은 Spring 확장입니다. 이렇게하면 :

    <plugin:list id="beanList" class="com.acme.MyCoolPluginInterface" />
    
    <bean class="com.acme.MyPluginHost">
       <property name="plugins" ref="beanList" />
    </bean>
    

    와일드 카드 가져 오기와 함께 다음을 수행합니다.

    사실, 이제 클래스 패스에 플러그인 모듈을 추가하여 앱을 확장 할 수 있습니다 (일명 Maven의 종속성).

    그 작은 Spring 확장은 Spring Plugin이라고 불리며 Apache 2 라이센스하에 게시됩니다. 자세한 내용은 http://github.com/SpringSource/spring-plugin을 참조하십시오. 또한 Github의 고급 샘플 프로젝트가 있는데, 어떻게 작동하는지 보여주고 GitHub에서 모듈성을 개선합니다. 응용 프로그램은 내 "웁스!"에 대한 샘플 코드입니다. 내 아키텍처는 어디로 갔습니까? " 여기에서 슬라이드를 보거나 여기에서 녹음을 볼 수있는 프리젠 테이션.

    일반적으로 우리는 앱이 타겟 환경에서 실행되도록 구성합니다 (JNDI 조회 등). 물론 표준 PropertyPlaceholderConfigurer 메커니즘을 사용하여 관리자가 변경하거나 다양한 환경에서 변경해야하는 구성을 외부화하려고합니다.

    통합 테스트를 위해 우리는 src / main / test에 추가 설정 파일을 가지고 있습니다.이 설정 파일은 일반적인 설정 파일에 추가로로드되어 설정을 환경에 묶는 중요한 bean을 덮어 씁니다. 예 : 일반 설정 파일에 데이터 소스가 있다면

     <jee:jndi-lookup id="dataSource" jndi-name="jdbc/MyDataSource" />
    

    당신은 test-context.xml 파일에서

     <bean id="dataSource" class="...DataSource" />
        <!-- config -->
     </bean>
    

    테스트 클래스에서 원래의 것 다음으로 가져 오기

     @ConfigurationContext(locations = {"app-context.xml", "test-context.xml"})
     public FooBarIntegrationtest {
       // ...
     }
    
  2. ==============================

    2.사용법에 따라 여러 XML 구성 파일에서 응용 프로그램 컨텍스트를 만들면됩니다.

    사용법에 따라 여러 XML 구성 파일에서 응용 프로그램 컨텍스트를 만들면됩니다.

    예를 들어 서버없이 테스트 할 경우 각 서비스 모듈의 모든 구성 파일을 사용하여 컨텍스트를 만듭니다.

    배포 할 때 Spring Remoting을 통해 서비스에 액세스하므로 클라이언트는 원격을 활성화하는 프록시 Bean을 정의하는 XML 구성을 통해 초기화되는 응용 프로그램 컨텍스트를 사용합니다. 한편 서비스는 테스트 케이스에서 사용 된 것과 동일한 XML 파일로 구성되지만 DispatcherServlet 또는 EJB 또는 MDB를 통해 응용 프로그램 컨텍스트가로드됩니다.

    이 설정을 사용하면 구성 파일에 정보를 복제 할 필요없이 각 시나리오에 맞게 Application Context를 조정할 수 있으므로 유지 관리가 훨씬 간단합니다. 또한, Imports를 통한 설정 파일 사이의 하드 종속성은 실제로 ApplicationContext를 생성하는 위의 계층에서 처리되기 때문에 가져 오기를 통한 종속성이 없습니다.

    아직 IDE를 사용하고 있지 않으므로 IDE 지원에 대해 언급 할 수 없습니다.

  3. from https://stackoverflow.com/questions/748377/how-do-you-make-a-multi-module-spring-configuration by cc-by-sa and MIT license