본문 바로가기

자바프레임워크

스프링 프레임 워크에 2 소개-모듈화되어져 있는 라이브러리

반응형
SMALL

스프링 프레임 워크에 2 소개

스프링 프레임 워크는 자바 응용 프로그램 개발을위한 포괄적 인 인프라 지원을 제공하는 자바 플랫폼입니다. 당신이 당신의 응용 프로그램에 집중할 수 있도록 Spring은 인프라를 처리합니다.

Spring은 "평범하고 오래된 자바 객체"(POJO에)에서 응용 프로그램을 구축하고 POJO를 비 침습적으로 엔터프라이즈 서비스를 적용 할 수 있습니다. 이 기능은 Java SE 프로그래밍 모델과 전체 및 부분 자바 EE에 적용됩니다.

당신은 응용 프로그램 개발자로, 봄 플랫폼 장점을 사용하는 방법의 예 :

  • 트랜잭션 API를 처리 할 필요없이 자바 방법은 데이터베이스 트랜잭션을 실행합니다.
  • 원격 API를 처리 할 필요없이 로컬 Java 메소드에게 원격 프로 시저를 확인합니다.
  • JMX API를 처리 할 필요없이 로컬 자바 메소드보기 관리 동작을 확인.
  • JMS API를 처리 할 필요없이 로컬 자바 메소드에게 메시지 처리기 만들기.

2.1 의존성 삽입 (Dependency Injection) 및 제어의 반전

Java 응용 프로그램 - n 계층 서버 측 엔터프라이즈 응용 프로그램에 제한 애플릿에서 영역을 실행하는 느슨한 용어 - 일반적으로 적절한 응용 프로그램을 형성하기 위해 협력 객체로 구성되어 있습니다. 따라서 응용 프로그램의 개체가 종속 서로를.

자바 플랫폼은 애플리케이션 개발의 풍부한 기능을 제공하지만, 그것은 건축가와 개발자들에게 해당 작업을 남겨두고 일관된 전체로 기본적인 빌딩 블록을 구성 할 수있는 수단이 부족하다. 같은 사실, 당신이 사용할 수있는 디자인 패턴 공장 , 추상 팩토리 , 빌더 , 실내 장식 및 서비스 로케이터 응용 프로그램을 구성하는 다양한 클래스와 객체의 인스턴스를 작성합니다. 그러나, 이러한 패턴이 단순히 아르 : 가장 좋은 방법은 패턴이 무엇을하는지에 대한 설명과 함께, 이름을 부여, 어디서, 등이 해결 문제 등을 적용합니다. 패턴 모범 사례 공식화 아르 당신이 자신을 구현해야합니다 응용 프로그램에 있습니다.

스프링 프레임 워크 제어의 반전 (IOC의)의 구성 요소 주소 사용을위한 준비가 완벽하게 작동 응용 프로그램에 서로 다른 구성 요소를 구성하는 공식화 된 수단을 제공함으로써 이러한 우려를. 스프링 프레임 워크는 사용자의 응용 프로그램 (들)에 통합 할 수 있습니다 일류 개체로 디자인 패턴을 정형화 된 성문화. 수많은 단체와 기관들은 강력한 엔지니어링이 방법으로 스프링 프레임 워크를 사용하여 유지 관리 응용 프로그램을.

2.2 모듈

스프링 프레임 워크는 약 20 모듈로 구성 기능으로 구성되어 있습니다. 다음 그림과 같이이 모듈은 코어 컨테이너, 데이터 액세스 / 통합, 웹, AOP (가로 지향 프로그래밍), 계측, 메시징 및 테스트로 분류됩니다.

그림 2.1. 스프링 프레임 워크의 개요

봄 개요

다음 섹션에서는 각에 사용할 수있는 모듈이 해당 이슈의 이름과 그들이 커버 주제와 함께 기능을 나열합니다. 이슈 이름은 상관이 ID를 유물 에 사용 종속성 관리 도구를 .

2.2.1 코어 컨테이너

코어 컨테이너 로 구성되어 봄 코어 , 봄 콩 , 스프링 컨텍스트 및 스프링 식 (스프링 식 언어) 모듈.

봄 코어 와 봄 콩 모듈은 프레임 워크의 기본 부품 제공 의 IoC와 의존성 주입 기능을 포함하여. 의 BeanFactory는 공장 패턴의 정교한 구현입니다. 이 프로그램에 따른 싱글 톤의 필요성을 제거하고 당신의 실질적인 프로그램 로직으로부터 설정과 의존성 명시를 분리 할 수 있습니다.

컨텍스트 ( 스프링 컨텍스트 ) 모듈에서 제공하는 견고한 기반을 기반으로 코어와 콩 모듈 : 그것은 JNDI 레지스트리 유사한 프레임 워크 스타일의 방식으로 개체에 ​​액세스 할 수있는 수단이다. 상황에 맞는 모듈 (자원 번들, 예를 들어, 사용), 예를 들어 이벤트 전파 자원의 적재 및 의해 컨텍스트의 투명 작성, 서블릿 컨테이너 콩 모듈에서 그 특징을 상속 및 국제화에 대한 지원을 추가합니다. 상황에 맞는 모듈은 또한 EJB, JMX 및 기본 원격으로 자바 EE의 기능을 지원합니다. 의 ApplicationContext 인터페이스는 컨텍스트 모듈의 초점이다.

스프링 식 모듈은 강력한 제공 표현식 언어 질의 및 런타임 객체 그래프를 조작한다. 이것은 JSP 2.1 규격에 규정 된 통합 표현 언어 (EL 통일)의 확장이다. 언어는 Spring의 IoC 컨테이너의 이름으로 배열, 컬렉션 및 색인, 논리 및 산술 연산자라는 변수 및 객체의 검색의 콘텐츠에 액세스하는 속성 값, 속성 할당, 메소드 호출을 설정하고 점점 지원합니다. 또한 목록 프로젝션 및 선택뿐만 아니라 일반적인 목록 집계를 지원합니다.

2.2.2 AOP 계측

스프링의 AOP 모듈은 제공 AOP 예를 들어, 메서드 인터셉터와 포인트 컷 깨끗하게 분리되어야 기능을 구현 코드를 분리하는, 당신은 정의 할 수 있도록 제휴 호환 aspect 지향 프로그래밍 구현을. 소스 레벨 메타 기능을 사용하여, 또한 닷넷 특성과 유사한 방식으로 코드에 행동 정보를 포함 할 수있다.

별도의 스프링 측면의 모듈은 AspectJ를 함께 통합을 제공합니다.

스프링 악기 모듈은 클래스 계측 지원 및 클래스 로더의 구현은 특정 응용 프로그램 서버에서 사용할 수 있습니다.

2.2.3 메시징

스프링 프레임 워크 4는 포함 스프링 메시징 키에서 추상화와 모듈 봄 통합 등의 프로젝트 메시지 , MessageChannel , MessageHandler 메시징 기반 응용 프로그램을위한 기반 역할을하고, 다른 사람을. 이 모듈은 또한 스프링 MVC 주석 기반의 프로그래밍 모델과 유사 방법으로 매핑 메시지에 대한 주석의 집합이 포함되어 있습니다.

2.2.4 데이터 액세스 / 통합

데이터 액세스 / 통합 계층은 JDBC, ORM, OXM, JMS, 트랜잭션 모듈로 구성되어 있습니다.

스프링 JDBC 모듈은 제공 JDBC의 끔찍한 JDBC 코딩과 데이터베이스 업체 특정 에러 코드의 파싱을 할 필요를 제거 -abstraction 층.

스프링의 ORM 모듈은 인기를위한 통합 레이어를 제공하는 객체 관계형 매핑 을 포함하는 API, JPA , JDO 및 최대 절전 모드 . 사용 스프링의 ORM 모듈을 당신은 이전에 언급 된 간단한 선언적인 트랜잭션 관리 기능 등 다른 기능들에서 제공하는, 모두와 함께이 O / R 매핑 프레임 워크를 모두 사용할 수 있습니다.

스프링 OXM의 모듈이 지원하는 추상화 계층 제공 개체 / XML 매핑 같은 JAXB, 피마자,에는 XMLBeans, JiBX에와 XStream과 같은 구현을.

스프링 JMS 모듈 ( 자바 메시징 서비스 (Java Messaging Service)는 ) 메시지 생성 및 사용을위한 기능이 포함되어 있습니다. 스프링 프레임 워크 4.1 때문에 통합 제공스프링 메시징 모듈.

스프링 텍사스의 모듈은 지원 프로그램과 선언적인 트랜잭션 특별한 인터페이스를 구현하는 클래스에 대한 관리 및 위해 모든 POJO에 (일반 올드 자바 객체) .

2.2.5 웹

 층으로 구성되어 스프링 웹 , 스프링 webmvc , 스프링 웹 소켓 및 스프링 webmvc-포틀릿 모듈.

스프링 웹 모듈은 다중 파일 업로드 기능과 서블릿 리스너 그리고 웹 - 기반 애플리케이션 컨텍스트를 사용하여 IoC 컨테이너의 초기화와 같은 기본적인 웹 - 기반 통합 기능을 제공합니다. 또한 Spring의 원격 지원 웹 관련 부품이 포함되어 있습니다.

스프링 webmvc의 (또한으로 알려진 모듈 웹 서블릿 모듈) 봄의 모델 - 뷰 - 컨트롤러 (포함 MVC 웹 응용 프로그램) 구현을. Spring의 MVC 프레임 워크는 도메인 모델 코드와 웹 형태 사이의 분명한 구분을 제공하고 스프링 프레임 워크의 다른 모든 기능과 통합됩니다.

스프링 webmvc-포틀릿 (또한 모듈로 알려진 웹 포틀릿 모듈) 포틀릿 환경에서 사용될 MVC 구현을 제공하고 기능의 거울 스프링 webmvc 용 모듈.

2.2.6 테스트

스프링 - 테스트 모듈은 지원 단위 테스트 및 통합 테스트 의 JUnit 또는 TestNG를 스프링 요소를. 그것은 일관성 제공 로딩 봄 의 ApplicationContext 의 및 캐싱 그 맥락을. 또한 제공 mock 객체 가 독립적으로 코드를 테스트 할 수 있습니다.

2.3 사용 시나리오

이전에 설명 된 빌딩 블록 애플릿​​에서 Spring의 트랜잭션 관리 기능과 웹 프레임 워크 통합을 사용 본격적인 엔터프라이즈 응용 프로그램에 많은 시나리오에서 봄 논리적 인 선택을합니다.

그림 2.2. 전형적으로 완전한 Spring 웹 응용 프로그램

전체 개요

Spring의 선언적 트랜잭션 관리 기능을 사용하면 EJB 컨테이너 관리 트랜잭션을 사용하는 경우가 될 것처럼, 웹 애플리케이션이 완벽하게 트랜잭션합니다. 당신의 모든 사용자 지정 비지니스 로직은 간단한 POJO를 구현하고 Spring의 IoC 컨테이너에 의해 관리 할 수 있습니다. 추가 서비스는 유효성 검사 규칙을 수행하기위한 위치를 선택 할 수있는 웹 층, 독립적 인 전자 메일 및 검증을 보내기위한 지원이 포함됩니다. Spring의 ORM 지원은 JPA, 최대 절전 모드 및 JDO와 통합되어 있습니다; 최대 절전 모드를 사용하는 경우, 예를 들어, 당신은 당신의 기존 매핑 파일 및 표준 최대 절전 모드를 계속 사용할 수 있습니다 SessionFactory에의 구성. 폼 컨트롤러는 완벽에 대한 요구 제거하는 도메인 모델을 가진 웹 레이어와 통합 ActionForms를 당신의 도메인 모델을위한 값에 HTTP 매개 변수를 변환 또는 다른 클래스를.

그림 2.3. 봄의 중간 계층 타사 웹 프레임 워크를 사용하여

개관과 써드 웹

때때로 상황은 다른 프레임 워크로의 완벽한 교체를 허용하지 않습니다. 스프링 프레임 워크는 않습니다 하지 이것 내 모든것을 사용하도록 당신에게 강요; 그것은 아니다모 아니면도 솔루션입니다. 스트럿츠, 태피스트리, JSF 또는 다른 UI 프레임 워크에 내장 된 기존의 프론트 엔드는 Spring 트랜잭션 기능을 사용할 수 있습니다 Spring 기반의 미들 티어와 통합 할 수 있습니다. 당신은 단순히 사용하여 비즈니스 로직을 묶을 필요가 의 ApplicationContext를 하고 사용 이 WebApplicationContext를 웹 계층을 통합 할 수 있습니다.

그림 2.4. 원격 사용 시나리오

개요 원격

당신이 웹 서비스를 통해 기존의 코드에 접근 할 필요가있을 때, 당신은 Spring의 사용할 수 있습니다 Hessian- , Burlap- , Rmi- 또는 JaxRpcProxyFactory 클래스를. 기존 응용 프로그램에 대한 원격 액세스를 사용하면 어렵지 않다.

2.5 그림. EJB는 - 기존 POJO를 포장

개요 EJB

스프링 프레임 워크도 제공 액세스 및 추상화 계층 기존 POJO를 재사용 및 확장에 사용하기 위해 무 상태 세션빈에서 그들을 포장, 안전 장치 선언적 보안을해야 할 수도 있습니다 웹 응용 프로그램을 할 수 있도록 엔터프라이즈 자바 빈즈를 들어.

2.3.1 종속성 관리 및 이름 지정 규칙

종속성 관리 및 의존성 주입은 여러 가지입니다. (의존성 주입 등) 응용 프로그램에 봄의 이러한 좋은 기능을 얻으려면 필요한 모든 라이브러리 (jar 파일)을 조립하고 런타임에 클래스 경로에 그들을 얻을 가능성이 컴파일시에해야합니다. 이들 종속성은 파일 시스템 (일반적으로)에 주입되고, 가상 구성 요소이지만 물리적 자원 아니다. 의존성 관리의 프로세스들을 저장하고 클래스 경로에 추가, 해당 리소스의 위치를 포함한다. 종속 관계 (예를 들어 내 응용 프로그램 실행시에 봄에 따라 다름) 직접 할 수있다, 또는 간접적으로 (예를 들어 내 응용 프로그램에 따라 다릅니다 공유지-DBCP 에 따라 공유지 풀 ). 간접 종속성은 "이적"로 알려져 있으며 그것은 어려운 아르 그 종속성을 식별하고 관리하는 것입니다있다.

당신이 봄을 사용하려는 경우 당신은 당신이 필요로하는 봄의 조각을 구성하는 항아리 라이브러리의 사본을 얻을 필요가있다. 하려면이 쉽게 봄 예를 들어 당신이 스프링 웹 모듈을 필요로하지 않는 웹 응용 프로그램을 작성하지 않으려면, 그래서 가능한 한 종속성을 별도의 모듈 세트로 패키지됩니다. 우리가 속기 명명 규칙을 사용하여이 가이드의 라이브러리 모듈을 봄을 참조하십시오 봄 - * 또는 . 봄 - * 항아리, *은 (모듈에 대한 짧은 이름을 나타냅니다 예를 들어 봄 코어 , 스프링 webmvc ,스프링 JMS 등 ). 사용할 실제 JAR 파일 이름은 일반적 버전 번호 (예와 병합 모듈 이름이다 스프링 코어 4.1.0.RELEASE.jar ).

Spring 프레임 워크의 각 릴리스는 다음과 같은 장소에 유물을 공개합니다 :

  • 쿼리를 받는다는 기본 저장소이며, 사용하기 위해 특별한 구성이 필요하지 않습니다 메이븐 중앙. 봄도 메이븐 중앙에서 사용할 수 있으며 스프링 지역 사회의 큰 부분은 의존성 관리를 위해 메이븐을 사용하기 때문에이 그들을 위해 편리에 따라 공통 라이브러리의 많은. 여기에 항아리의 이름은 양식에 봄 - * - <버전>의 .jar 와 메이븐의 groupId는 org.springframework .
  • 공공 메이븐 저장소에서 봄을 위해 특별히 개최했다. 최종 GA 릴리스뿐만 아니라,이 저장소는 개발 스냅 샷과 이정표를 개최하고 있습니다. jar 파일의 이름은 메이븐 중앙과 같은 형태로, 그래서이 메이븐 중앙에 배치 된 다른 라이브러리와 함께 사용할 봄의 개발 버전을 얻을 수있는 유용한 장소입니다. 이 저장소는 쉬운 다운로드를 위해 함께 번들 모든 봄 항아리를 포함하는 번들 배포 zip 파일이 포함되어 있습니다.

그래서 당신이 결정해야합니다 첫 번째 것은 당신의 의존성을 관리하는 방법이다 : 우리는 일반적으로 메이븐, Gradle 나 아이비 같은 자동화 된 시스템을 사용하는 것이 좋습니다,하지만 당신은 모든 단지 자신을 다운로드하여 수동으로 작업을 수행 할 수 있습니다. 우리는이 장의 뒷부분에서 자세한 지침을 제공합니다.

봄 종속성과 봄에 따라

봄이 기업과 다른 외부 도구의 거대한 범위에 대한 통합 지원을 제공하지만, 그것은 의도적으로 최소한으로의 필수 종속성을 유지 : 당신이 찾아하기 위해 (심지어 자동) 항아리 라이브러리의 큰 숫자를 다운로드 할 필요가 없습니다 간단한 사용 사례에 스프링을 사용합니다. 기본적인 의존성 주입을 위해 단 하나의 필수 외부 의존성이, 그리고 그 (로깅 옵션에 대한 자세한 설명은 아래 참조)에 로그인 할 수 있습니다.

다음으로 우리는 첫번째 메이븐으로 다음 Gradle와 마지막으로 아이비를 사용, 봄에 의존하는 응용 프로그램을 구성하는 데 필요한 기본 단계를 설명합니다. 불분명 한 점 등이 있으면 모든 경우에, 당신의 의존성 관리 시스템의 문서를 참조하거나 일부 샘플 코드를 보면 - 봄 자체가 구축 될 때 종속성을 관리 할 수​​ Gradle 사용하고, 우리의 샘플은 대부분 Gradle 또는 메이븐을 사용합니다.

메이븐 의존성 관리

당신이 사용하는 경우 메이븐 의존성 관리를 위해 당신은 심지어 명시 적으로 로깅 의존성을 제공 할 필요는 없습니다. 예를 들어, 메이븐 의존성이 다음과 같이 표시됩니다 응용 프로그램 컨텍스트를 생성하고 응용 프로그램을 구성하기 위해 의존성 주입을 사용합니다 :

<dependencies> 
    <dependency> 
        <groupId> org.springframework </groupId> 
        <artifactId> spring-context </artifactId> 
        <version> 4.1.0.RELEASE </version> 
        <scope> runtime </scope> 
    </dependency> 
</dependencies>

그게 다야. 당신은 일반적으로 기본적인 의존성 주입 사용 사례의 경우와 봄 API에 대해 컴파일 할 필요가없는 경우 범위가 런타임으로 선언 할 수 있습니다.

위의 예는 메이븐 중앙 저장소와 함께 작동합니다. 봄 메이븐 저장소 (마일스톤 또는 개발자 스냅 샷 등)을 사용하려면, 당신은 당신의 메이븐 구성에서 저장소 위치를 지정해야합니다. 전체 릴리스의 경우 :

<repositories> 
    <repository> 
        <id> io.spring.repo.maven.release </id> 
        <url> http://repo.spring.io/release/ </url> 
        <snapshots> <enabled> false </enabled> </snapshots> 
    </repository> 
</repositories>

이정표를 들면 :

<repositories> 
    <repository> 
        <id> io.spring.repo.maven.milestone </id> 
        <url> http://repo.spring.io/milestone/ </url> 
        <snapshots> <enabled> false </enabled> </snapshots> 
    </repository> 
</repositories>

그리고 스냅 샷은 :

<repositories> 
    <repository> 
        <id> io.spring.repo.maven.snapshot </id> 
        <url> http://repo.spring.io/snapshot/ </url> 
        <snapshots> <enabled> true </enabled> </snapshots> 
    </repository> 
</repositories>

메이븐 "재료 명세서 (BOM)"종속성

그것은 메이븐을 사용할 때 실수로 봄 JAR 파일의 서로 다른 버전을 함께 사용하는 것이 가능하다. 예를 들어, 타사 라이브러리 또는 다른 봄 프로젝트는, 이전 릴리스로 이적 의존성에 끌어 것을 알 수 있습니다. 명시 적으로 직접 종속성을 직접 선언하지 않으면, 예상치 못한 문제가 모든 종류의가 발생할 수 있습니다.

메이븐 (BOM) 종속 "재료의 법안"의 개념을 지원 이러한 문제를 극복하기 위해. 당신은 가져올 수 있습니다 스프링 프레임 워크 BOM을 당신에dependencyManagement의 (직접 및 전이 모두) 모든 스프링 의존성이 동일한 버전에 있는지 확인하기 위해 절을 참조하십시오.

<dependencyManagement> 
    <dependencies> 
        <dependency> 
            <groupId> org.springframework </groupId> 
            <artifactId> spring-framework-bom </artifactId> 
            <version> 4.1.0.RELEASE </version> 
            <type> pom </type> 
            <scope> import </scope> 
        </dependency> 
    </dependencies> 
</dependencyManagement>

BOM을 사용하는 이점은 더 이상 지정할 필요가 없다는 것입니다 <버전> 스프링 프레임 워크 이슈에 따라 때 속성을 :

<dependencies> 
    <dependency> 
        <groupId> org.springframework </groupId> 
        <artifactId> spring-context </artifactId> 
    </dependency> 
    <dependency> 
        <groupId> org.springframework </groupId> 
        <artifactId> spring-web </artifactId> 
    </dependency> 
<dependencies>

Gradle 종속성 관리

함께 봄 저장소를 사용하려면 Gradle의 빌드 시스템에서 해당 URL이 포함 저장소의 섹션 :

저장소 {
    mavenCentral ()
    // 선택적으로 ...
    받는다는 {URL "http://repo.spring.io/release"}
}

당신은 변경할 수 있습니다 저장소의 URL에서 릴리스 / 에 / 이정표 또는 / 스냅 샷 적절합니다. 저장소가 구성되면, 당신은 평소 Gradle 방식으로 종속성을 선언 할 수 있습니다 :

종속 {
    ( "봄 컨텍스트 : org.springframework을 4.1.0.RELEASE")를 컴파일
    testCompile ( "org.springframework : 봄 테스트 : 4.1.0.RELEASE")
}

아이비 의존성 관리

당신이 사용하려는 경우 아이비 종속성을 관리하기 위해 다음과 유사한 구성 옵션이 있습니다.

당신에 다음 리졸버를 추가 봄 저장소를 가리 키도록 아이비를 구성하려면 ivysettings.xml :

<resolvers> 
    <ibiblio  name = "io.spring.repo.maven.release" 
            m2compatible = "true" 
            root = "http://repo.spring.io/release/" /> 
</resolvers>

당신은 변경할 수 있습니다 루트 에서 URL 릴리스 / / 에 / 이정표 / 또는 / / 스냅 샷을 적절하게.

일단 구성되면, 당신은 일반적인 방법으로 종속성을 추가 할 수 있습니다. (예를 들면 ivy.xml )

<종속  조직 = "org.springframework" 
    이름 = "봄 코어"  REV = "4.1.0.RELEASE"  conf의 = "컴파일 -> 실행" />

배포 우편 번호 파일

의존성 관리를 지원하는 시스템을 구축을 사용하는 스프링 프레임 워크를 얻기 권장되는 방법이지만,이 분포 압축 파일을 다운로드하는 것이 여전히 가능하다.

배포 지퍼 (이 단지 우리의 편의를 위해, 당신이 그들을 다운로드하기 위해 메이븐 또는 다른 빌드 시스템을 필요로하지 않는 경우) 봄 메이븐 저장소에 게시됩니다.

다운로드하려면 배포 지퍼에 웹 브라우저를 열고 http://repo.spring.io/release/org/springframework/spring을 원하는 버전에 해당하는 하위 폴더를 선택합니다. 배포 파일은 종료 -dist.zip 예를 들어, 스프링 프레임 워크 4.1.0.RELEASE-RELEASE-dist.zip . 배포도에 게시 이정표 및 스냅 샷 .

2.3.2 로깅

때문에 로깅 봄을위한 매우 중요한 의존성이다 ) 가 의무적으로 외부 의존성이다 b)는 모든 사람들이 사용하는 도구에서 일부 출력을 볼 것을 좋아하고, C) 봄도 만들었습니다 모두 다른 많은 도구와 통합 로깅 종속성의 선택. 애플리케이션 개발자의 목표 중 하나는 모든 외부 구성 요소를 포함하는 전체의 애플리케이션에 대한 중앙 위치에 구성된 통합 로깅을 갖도록 종종있다. 이 로깅 프레임 워크의 많은 선택이 있기 때문에이되었을 것보다 더 어렵습니다.

봄의 필수 로깅 의존성은 자카르타 커먼즈 로깅 API (JCL)입니다. 우리는 JCL에 대해 컴파일하고 우리는 또한 JCL 수 있도록 로그 스프링 프레임 워크를 확장하는 클래스를 볼 수 객체. 봄의 모든 버전이 동일한 로깅 라이브러리를 사용하는 사용자에게 중요한 : 이전 버전과의 호환성도 봄을 확장 응용 프로그램과 함께 보존되어 있기 때문에 마이그레이션이 용이하다. 우리는이 작업을 수행하는 방법은 봄의 모듈 중 하나에 명시 적으로 의존하는 것입니다 몬즈 로깅 (JCL의 표준 구현을)하고 다른 모든 모듈이 컴파일시에 그에 의존합니다. 당신은 예를 들어 메이븐을 사용하여, 당신은에 종속성을 석권 궁금해하는 경우 공유지 로깅 , 그것은 봄에서 구체적으로 불리는 중앙 모듈에서입니다 봄 코어 .

의 좋은 점 평민 로깅은 당신이 당신의 응용 프로그램 작업을 할 아무것도 필요가 없다는 것입니다. 이 적절하다고 생각하는 것이 일을 클래스 패스에 잘 알려진 장소에서 다른 로깅 프레임 워크를 찾고 사용하는 런타임 검색 알고리즘을 가지고 (또는 당신이 필요로하는 경우 당신은 일을 알 수 있습니다). 아무것도 사용할 수없는 경우 당신은 JDK (으로 java.util.logging 또는 줄여서 7 월)에서 꽤 좋은 찾고 로그를 얻을. 당신은 당신의 봄 응용 프로그램이 작동하고 대부분의 경우 상자 밖으로 콘솔에 행복하게 기록 것을 발견한다, 그것은 중요합니다.

풍경, Photo 로깅을 사용하지 않음

불행히도, 런타임에서 발견 알고리즘 커먼스 로깅은 , 최종 사용자에게 편리한 반면, 문제가있다. 우리는 새로운 프로젝트로 현재 시간을 되돌릴 봄을 시작할 수 있다면 그것은 다른 로깅 의존성을 사용합니다. 첫 번째 선택은 아마 자바 (대한 간단한 로깅 외관 것 SLF4J 또한 사람들이 자신의 응용 프로그램 내부의 스프링과 함께 사용하는 다른 많은 도구에 의해 사용된다).

해제하려면 두 가지 방법에는 기본적으로 평민 로깅은 :

  1. 에서 종속성 제외 봄 코어 (명시 적으로에 따라 유일한 모듈로 모듈을 평민 로깅 )
  2. 특별한에 따라 평민 로깅 빈 항아리와 라이브러리를 대체 의존성 (자세한 내용은에서 찾을 수 있습니다 SLF4J 자주 묻는 질문 ​​)

평민 로깅을 제외하려면, 당신에 다음을 추가 dependencyManagement의 섹션 :

<dependencies> 
    <dependency> 
        <groupId> org.springframework </groupId> 
        <artifactId> spring-core </artifactId> 
        <version> 4.1.0.RELEASE </version> 
        <exclusions> 
            <exclusion> 
                <groupId> commons-logging </groupId> 
                <artifactId> commons-logging </artifactId> 
            </exclusion> 
        </exclusions> 
    </dependency> 
</dependencies>

그래서 새가 제공되어야 그것을 해결하기 위해, 클래스 패스에 JCL API의 더 구현이 없기 때문에 지금이 응용 프로그램은 아마 나뉩니다. 다음 절에서 우리는 예를 들어 SLF4J를 사용하여 JCL의 대체 구현을 제공하는 방법을 보여줍니다.

SLF4J를 사용하여

SLF4J보다 런타임에 청소기 의존하고 더 효율적입니다 몬즈 로깅 은 컴파일 타임 바인딩을 대신 통합 다른 로깅 프레임 워크의 런타임 발견의 사용하기 때문에. 이렇게하면 런타임에 발생하는 것이 대한 자세한 명시해야하고, 그것을 선언하거나 적절하게 구성하는 것을 의미한다. 당신은 일반적으로 이미 사용 중 하나를 선택, 구성 및 관리를위한 해당 바인딩 할 수 있도록 SLF4J는 많은 공통 로깅 프레임 워크에 바인딩을 제공합니다.

SLF4J는 JCL 등 많은 공통 로깅 프레임 워크에 바인딩을 제공하며, 또한 역 수행 다른 로깅 프레임 워크와의 사이 다리를. 그래서 당신은 교체 할 필요가 봄과 SLF4J를 사용하는 평민 로깅 SLF4J-JCL 다리 의존성을. 당신이 당신의 응용 프로그램에서 다른 라이브러리가 API를 사용하는 경우, 그래서 봄 내에서 그 다음 로깅 호출이 SLF4J API에 로깅 호출로 변환됩니다 완료되면, 당신은 구성 및 로깅을 한 곳에서 관리 할 수 있습니다.

일반적인 선택은 SLF4J에 스프링을 연결 한 다음 Log4J를 명시 적 SLF4J 바인딩을 제공 할 수 있습니다. 당신은 4 종속성을 공급 (기존 제외 할 필요가 평민 로깅을 ) : 다리, SLF4J API를 Log4J를 바인딩하고, Log4J를 구현 자체를. 메이븐은 다음처럼 할 것이라고

<dependencies> 
    <dependency> 
        <groupId> org.springframework </groupId> 
        <artifactId> spring-core </artifactId> 
        <version> 4.1.0.RELEASE </version> 
        <exclusions> 
            <exclusion> 
                <groupId> commons-logging </groupId> 
                <artifactId> commons-logging </artifactId> 
            </exclusion> 
        </exclusions> 
    </dependency> 
    <dependency> 
        <groupId> org.slf4j </groupId> 
        <artifactId> jcl-over-slf4j </artifactId> 
        <version> 1.5.8 </version> 
    </dependency> 
    <dependency> 
        <groupId> org.slf4j </groupId> 
        <artifactId> slf4j-api </artifactId> 
        <version> 1.5.8 </version> 
    </dependency> 
    <dependency> 
        <groupId> org.slf4j </groupId> 
        <artifactId> slf4j-log4j12 </artifactId> 
        <version> 1.5.8 </version> 
    </dependency> 
    <dependency> 
        <groupId> log4j </groupId> 
        <artifactId> log4j </artifactId> 
        <version> 1.2.14 </version> 
    </dependency> 
</dependencies>

의존성이 많이 그냥 로깅을 얻기 위해 같은 즉 보일 수 있습니다. 그것은 음이지만 이며 선택적하고 바닐라보다 행동해야 커먼스 로깅 하면 OSGI 플랫폼처럼 엄격한 용기에 특히 경우, 문제를 로더에 대하여. 바인딩은 컴파일 시간이 아니다 런타임에 있기 때문에업자도 성능 이점이있다.

적은 단계를 사용하여 적은 수의 종속성을 생성 SLF4J 사용자 사이에 일반적인 선택에 직접 결합하는 것입니다 Logback . Logback 직접 SLF4J를 구현하기 때문에 여분의 바인딩 단계를 제거, 그래서 당신은 두 개의 라이브러리하지 사 (에 의존 할 필요가 JCL - 이상 - SLF4J 와 logback ). 당신은 또한 당신은 클래스 패스에 해당 API의 한 버전을 원하기 때문에, (봄되지 않음) 다른 외부 종속성에서 SLF4J-API 의존성을 제외해야 할 수도 있습니다 그렇게한다면.

Log4J를 사용

많은 사람들이 사용 의 Log4j를 구성 및 관리를 위해 로깅 프레임 워크로. 그것은 효율적이고 잘 설립, 그리고 사실 우리가 구축하고 테스트 봄 때 우리가 실행시에 무엇을 사용. Spring은 또한 구성하고 Log4j의 초기화에 대한 몇 가지 유틸리티를 제공합니다, 그래서 일부 모듈에서의 Log4j의 선택 사양 컴파일 타임 의존성을 가지고있다.

기본 JCL 의존성 (와의 Log4j 작동하도록 평민 로깅을 ) 당신은 클래스 패스의 Log4j를 넣어 수행하고 (구성 파일을 제공하는 데 필요한 모든 log4j.properties 또는의 log4j.xml 클래스 패스의 루트에). 그래서 메이븐 사용자를 위해이는 의존성 선언은 다음과 같습니다

<dependencies> 
    <dependency> 
        <groupId> org.springframework </groupId> 
        <artifactId> spring-core </artifactId> 
        <version> 4.1.0.RELEASE </version> 
    </dependency> 
    <dependency> 
        <groupId> log4j </groupId> 
        <artifactId> log4j </artifactId> 
        <version> 1.2.14 </version> 
    </dependency> 
</dependencies>

그리고 여기에 콘솔에 로그인하고있는 샘플 log4j.properties을이다 :

설정 log4j.rootCategory = INFO, 표준 출력

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = % d의 {ABSOLUTE} % 5P % t의 %의 C {2} %의 L - %의 m의 % n을

log4j.category.org.springframework.beans.factory = DEBUG
기본 JCL과 런타임 컨테이너

많은 사람들이 자신이 JCL의 구현을 제공하는 컨테이너에 자신의 봄 응용 프로그램을 실행합니다. IBM 웹 스피어 애플리케이션 서버 (WAS)은 원형이다. 이것은 종종 문제가 발생하고, 불행하게도 어떤 묘책 솔루션이 없다; 간단하게 제외 평민 로깅을 응용 프로그램에서 대부분의 상황에서 충분하지 않습니다.

이것에 대해 명확하게하려면 다음을보고 문제가 JCL 자체, 심지어와 함께 일반적으로없는 평민 로깅 : 오히려 바인딩을 함께 할 수있는 평민 로깅을 다른 프레임 워크 (보통 Log4J를)로. 때문에 실패 할 수 있습니다 평민 로깅은 그들이 어떤 용기에있는 이전 버전 (1.0) 대부분의 사람들이 지금 (1.1)를 사용하여 현대적인 버전 사이에서 런타임 검색을 할 방법을 변경했습니다. 봄은 JCL API의 이상한 부품을 사용하지 않기 때문에 아무것도 나누기,하지만 곧 봄 또는 응용 프로그램이 당신의 Log4J에 바인딩이 작동하지 않는 것을 발견 할 수있는 모든 로깅을 수행하려고합니다.

할 수있는 가장 쉬운 방법 WAS와 같은 경우에 응용 프로그램이 JCL 의존성이 아닌 컨테이너를 제어하도록 (IBM은 "부모 마지막"이라고 부른다) 클래스 로더 계층 구조를 반전하는 것입니다. 그 옵션은 항상 열려 아니라, 다른 방식의 접근에 대한 공개 도메인에있는 다른 제안의 많음이 있고, 마일리지는 컨테이너의 정확한 버전 및 기능 세트에 따라 달라질 수 있습니다.


반응형
LIST

'자바프레임워크' 카테고리의 다른 글

ObjectAid UML  (0) 2014.09.24
스프링 공부 순서  (0) 2014.09.22
스프링3.0  (0) 2014.09.22
Ajax  (0) 2014.09.19
자바 프레임워크 ENVIRONMENT&ENVIROMENTS  (0) 2014.09.19