2013-05-21 6 views
4

저는 봄 초보자이며 인터넷을 통해 흩어져있는 코드를 읽으면서이를 배우려고합니다. 이 코드의 pom.xml을 살펴보면, 사람들은 그 프로젝트에 대한 종속성을 추가함으로써 서로의 옆에 "스프링 코어"와 "스프링 컨텍스트"를 사용하는 것을 거의 항상 볼 수 있습니다. 종속성 계층 구조를 살펴보면, 스프링 중심이 이미 스프링 컨텍스트에 있음을 알 수 있습니다.스프링 프로젝트에서 스프링 코어와 스프링 컨텍스트 종속성을 함께 사용해야합니까?

그럼 내 질문 : 두 가지를 모두 사용해야합니까? "스프링 - 컨텍스트"에서 "스프링 코어"와 별도의 아티팩트로 "스프링 코어"사이에 차이가 있습니까?

+2

이것은 메모리에서 왔기 때문에 comment vs answer ... spring-core는 스프링 컨텍스트에 나열된 종속성 일 가능성이 높습니다. 본질적으로 "포함 된"것은 아닙니다. Maven은 의존적 인 jar를 다운로드하지만, 애플리케이션이 spring-core에서 직접 뭔가를 사용한다면 스프링 컨텍스트에서 간접적 인 의존성을 가지더라도 의존성으로 나열해야한다. – Gus

+1

@Gus이 댓글에 감사드립니다. –

답변

11

전이 종속성이라고합니다. 스프링 - 코어를 선언하지 않으면 스프링 - 컨텍스트가 선언 했으므로 여전히이를 얻습니다.

전이 의존성 메커니즘 덕택에 스프링 코어를 선언했는지 여부에 관계없이 코드가 작동합니다. 그래서 이것은 최상의 실천의 문제이지 그것이 효과가 있는지 아닌지에 관한 문제는 아닙니다.

질문은 왜 스프링 코어가 필요한가요?

  • 코드가 직접 참조하지 않는 경우 스프링 컨텍스트가 있더라도 필요하지 않습니다. 그래서 스프링 컨텍스트에서 스프링 코어가 필요하다고 선언하도록합니다. 직접 선언하지 마십시오.
  • 코드에서 spring-core의 내용을 직접 참조하는 경우 스프링 컨텍스트가 필요한지 여부에 관계없이 코드가 필요합니다. 앞으로의 버전에서 스프링 - 컨텍스트는 더 이상 스프링 - 코어에 의존하지 않을 것입니다. 따라서 스프링 코어를 선언해야합니다.

한 문장으로, 당신도 명시 적으로 자신이 사용하는 의존성을 명시 적으로 선언해야합니다.

장난감 프로젝트에서는 중요하지 않습니다. 그러나 그것은 대규모 프로젝트에서 장기간 유지 보수를 훨씬 쉽게합니다.

편집 : 스프링 코어와 스프링 컨텍스트가 너무 밀접하게 연결되어 위의 조언은 중요하지 않습니다. 흔히의 경우 입니다. 로깅 패키지 L에 의존하는 라이브러리 A를 사용하는 경우가 있습니다. 자신의 코드가 L을 사용하는 경우, A가 나중에 쉽게 사용할 수 있기 때문에 명시 적으로 종속성을 명시하는 것이 좋습니다. 다른 로깅 패키지. 다른 한편, 스프링 컨텍스트가 스프링 코어의 기능에 대해 다른 공급자로 전환 할 가능성은 적습니다 ...

+0

멋지게 설명했습니다. –

5

Andrew와 Gus 모두 귀하의 질문에 대한 완전한 정의를했습니다. 나는 봄 쪽에서 좀 더 자세히 설명하려고한다. Spring으로 막 시작했다면 Dependency Injection이 어떻게 작동하는지 이해하고 있다고 가정하는 것이 안전하다고 생각합니다.

BeanFactoryApplicationContext으로 샘플을 이동해야합니다. 사물의 콩면은 spring-context 병에 포함되어 있습니다 (예 : XmlBeanFactory 등)의 spring-beans 항에 포함되어 있고 내용의 컨텍스트 측면 (ClassPathXmlApplicationContext 등)이 포함되어 있습니다.

그러나 두 가지 종속성 주입 컨테이너 중 하나를 사용하려면 core.io 패키지에서 제공하는 특정 공통 클래스 (예 : ClassPathResource, FileSystemResource)를 사용해야하므로 응용 프로그램이 종속 된 이유가됩니다 spring-core 병.

또한 web.xml에서 정의한 "문자열"속성 값이 기본 유형이나 래퍼 유형과 같은 올바른 데이터 유형으로 자동 변환되는지 확인하십시오. 이는 spring-core jar가 제공하는 Properties Editor 지원을 통해 발생합니다.

+0

예. 이 두 항아리는 너무 밀접하게 연결되어있어 종속성 관리에 대한 우수 사례가 아닌 전형적인 사례입니다. –

관련 문제