복붙노트

[SPRING] Spring annotation 기반 DI 대 XML 구성?

SPRING

Spring annotation 기반 DI 대 XML 구성?

최근 우리 팀에서는 스프링 의존성을 정의하기 위해 코드에서 스프링 주석을 사용하여 토론하기 시작했습니다. 현재 context.xml을 사용하여 종속성을 정의하고 있습니다. 당신에게 접근법에 대한 단서를 줄 수 있습니까?

편집 :이 좀 더 일반적인 질문에 중복 보인다,하지만 나는 일반적인 질문보다 다른 답변과 태도를 것이라고 믿는 종속성 주입에 대한 구성 대 구성의 영향을 관심이 있어요.

해결법

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

    1.관련 게시물을 읽은 후 팀에서 토론을하면 다음과 같은 결론을 얻을 수 있습니다. 나는 다른 사람들에게 유용 할 수 있기를 바랍니다.

    관련 게시물을 읽은 후 팀에서 토론을하면 다음과 같은 결론을 얻을 수 있습니다. 나는 다른 사람들에게 유용 할 수 있기를 바랍니다.

    우리가 지금까지 사용하고있는 XML 설정에 관해서 우리는 라이브러리에 정의 된 종속성 (우리 또는 제 3자가 개발했는지 여부와 무관하게)을 유지하기로 결정했습니다. 라이브러리는 정의에 따라 특정 기능을 제공하며 반드시 DI가 아닌 다양한 시나리오에서 사용할 수 있습니다. 그러므로 우리가 스스로 개발 한 라이브러리 프로젝트에서 주석을 사용하면 DI 프레임 워크 (우리의 경우에는 Spring)가 라이브러리에 종속되어 있으므로 비 -DI 컨텍스트에서 라이브러리를 사용할 수 없게됩니다. 여분의 의존성을 갖는 것은 우리 팀 (일반적으로 IMHO)에서 우수 사례로 간주되지 않습니다.

    응용 프로그램을 어셈블 할 때 응용 프로그램 컨텍스트는 필요한 종속성을 정의합니다. 응용 프로그램이 모든 참조 된 구성 요소를 결합하는 중앙 단위가 될 때 종속성 추적을 단순화합니다. 일반적으로 모든 배선이 발생해야합니다.

    XML은 여러 구성 요소에 대한 모의 구현을 제공 할 때 모질 구현을 사용할 응용 프로그램 모듈을 다시 컴파일하지 않고도 유용합니다. 따라서 로컬 또는 프로덕션 환경에서 테스트를 수행 할 때 유연성이 제공됩니다.

    주석과 관련하여 우리는 주입 된 구성 요소가 변하지 않을 때 - 예를 들어 구성 요소의 특정 구현 만이 응용 프로그램을 통해 사용되는 경우와 같이 사용할 때 이점을 얻을 수 있다고 결정했습니다.

    어노테이션은 다른 의존성을 한번에 변경하거나 지원하지 않으며, 다른 방식으로 구성 될 가능성이없는 작은 컴포넌트 / 애플리케이션 (예 : 다른 빌드에 대해 서로 다른 종속성 사용)에 매우 유용합니다. 간단한 마이크로 서비스가이 카테고리에 적합합니다.

    어노테이션으로 구성된 작은 컴포넌트는 각 애플리케이션이 XML 구성에서 커버하지 않고도 다른 프로젝트에서 바로 사용할 수 있습니다. 이렇게하면 응용 프로그램의 응용 프로그램 종속성 배선이 단순 해지고 반복적 인 설정이 줄어 듭니다.

    그러나 그러한 구성 요소는 기술 문서에 잘 설명 된 종속성을 가져야하므로 전체 응용 프로그램을 어셈블 할 때 코드를 스크롤하거나 IDE에서 모듈을로드하지 않고 이러한 종속성에 대한 아이디어를 얻을 수 있습니다.

    어노테이션 구성 요소의 부작용은 다른 구성 요소가 전이 종속성을 충돌시킬 수 있으며 충돌을 해결하기 위해 최종 응용 프로그램에 달려 있다는 것입니다. 이러한 종속성이 XML에 정의되어 있지 않으면 충돌 해결 방법이 매우 제한적일뿐 아니라 가능한 경우 모범 사례에서 멀리 떨어져 있습니다. 따라서 주석을 사용할 때 구성 요소는 사용할 종속성에 대해 충분히 성숙해야합니다.

    일반적으로 서로 다른 시나리오에 따라 의존성이 달라 지거나 모듈이 다른 구성 요소와 함께 사용될 수 있다면 우리는 XML을 고수하기로 결정했습니다. 분명히 두 가지 접근 방식 사이에 올바른 균형이 있어야하며 용도에 대한 명확한 아이디어가 있어야합니다.

    혼합 된 접근법에 관한 중요한 업데이트. 최근에 다른 프로젝트의 종속성이 필요한 QA 팀을 위해 만든 테스트 프레임 워크가 있습니다. 프레임 워크는 주석 접근법과 Spring 구성 클래스를 사용하도록 설계된 반면, 참조 된 프로젝트에는 참조해야하는 일부 XML 컨텍스트가 있습니다. 불행하게도 테스트 클래스 (스프링 지원을 사용하여 org.testng 사용)는 xml 또는 java 구성 클래스 중 하나에서만 작동하며 둘을 혼합하지는 않습니다.

    이 상황은 접근법을 혼합하는 것이 충돌하고 분명히 폐기되어야하는 경우를 보여줍니다. 우리의 경우에는 테스트 프레임 워크를 봄 xml 컨텍스트를 사용하도록 마이그레이션했지만 다른 용도는 다른 방법을 의미 할 수 있습니다.

  2. ==============================

    2.내 경험에 비추어 볼 때, 나는 XML과 annotation 기반 DI의 조합을 사용하는 것을 선호한다. 빈 내부에 요소 맵을 삽입해야한다면 util : map을 정의하고 autowire해야합니다. 또한 여러 데이터 소스 등이있는 경우 XML DI를 사용하여 sessionFactory에 데이터 소스를 주입해야합니다. 그래서 두 가지 모두의 조합이 요구됩니다.

    내 경험에 비추어 볼 때, 나는 XML과 annotation 기반 DI의 조합을 사용하는 것을 선호한다. 빈 내부에 요소 맵을 삽입해야한다면 util : map을 정의하고 autowire해야합니다. 또한 여러 데이터 소스 등이있는 경우 XML DI를 사용하여 sessionFactory에 데이터 소스를 주입해야합니다. 그래서 두 가지 모두의 조합이 요구됩니다.

    나는 서비스와 DAO를 자동 감지하기 위해 컴포넌트 스캔의 사용을 선호한다. 이렇게하면 많은 구성 (구성 파일을 구성 요소 스캔으로 전환 할 때 약 50 % 줄임)이 줄어 듭니다. 주석 기반 DI는 byName (@Resource)과 byType (@Autowired)을 모두 지원합니다.

    짧은 내 충고로 둘 다의 정착물에 갈 수 있습니다. 향후 스프링 릴리스에서 더 많은 주석 지원 기능이 카드에 확실히 제공 될 것입니다.

  3. ==============================

    3.이 답변을 여기에서보십시오 : Xml 구성 대 주석 기반 구성

    이 답변을 여기에서보십시오 : Xml 구성 대 주석 기반 구성

    거기에서 직접 간단한 견적 :

    편집 : 또한, 여기에 답변을보십시오 : Java 종속성 주입 : XML 또는 주석 그들은 아마 가장 잘 관심 분야를 대상으로.

  4. ==============================

    4.XML 구성 사용의 몇 가지 장점 :

    XML 구성 사용의 몇 가지 장점 :

    따라서 짧은 XML 구성에서는 좀 더 많은 노력이 필요하지만 나중에 큰 프로젝트에서 많은 시간과 두통을 줄여줍니다.

  5. ==============================

    5.내 자신의 경험 주석에서 xml 구성보다 낫다. 어쨌든 xml을 재정의하고 주석을 사용할 수 있다고 생각합니다. 또한 Spring 4는 주석에 대한 엄청난 지원을 제공합니다. xml에서 주석 e.t.c로 보안을 오버라이드 할 수 있으므로 100 줄 x 10 줄 Java 코드가됩니다.

    내 자신의 경험 주석에서 xml 구성보다 낫다. 어쨌든 xml을 재정의하고 주석을 사용할 수 있다고 생각합니다. 또한 Spring 4는 주석에 대한 엄청난 지원을 제공합니다. xml에서 주석 e.t.c로 보안을 오버라이드 할 수 있으므로 100 줄 x 10 줄 Java 코드가됩니다.

  6. ==============================

    6.내 개인적인 선택은 당신이 한 곳에서 모든 것을 가지고 있기 때문에 xml이 더 낫다는 것과 당신이 수업을 검색하기 위해 당신의 패키지를 깊이 들여다 볼 필요가 없다는 것입니다.

    내 개인적인 선택은 당신이 한 곳에서 모든 것을 가지고 있기 때문에 xml이 더 낫다는 것과 당신이 수업을 검색하기 위해 당신의 패키지를 깊이 들여다 볼 필요가 없다는 것입니다.

  7. from https://stackoverflow.com/questions/8428439/spring-annotation-based-di-vs-xml-configuration by cc-by-sa and MIT license