학습 가이드 스프링 빈 설정 장 III (미완성)

세 번째 장 빈 설정

이 장에서는 다음을 포함한다 :

  1. 빈 정의 상속 :
  2. 어떻게 생성자 빈 클래스의 인수를 해결하는 방법 :
  3. 원시적 형태와 같은 bean 프라퍼티와 생성자의 인수로 (예를 들어, INT, 플로트 등), 컬렉션의 유형 (예를 java.util.List, java.util.Map) 및 기타 사용자 정의 유형 (예를 들어, 주소)를 구성하는 방법;
  4. 상황에 맞는 XML 파일을 간단하게 사용하는 응용 프로그램에 각각 네임 스페이스를 P 네임 스페이스와 C를 사용하여 bean 프라퍼티와 생성자의 매개 변수를 지정하는 방법;
  5. 자신의 Spring의 팩토리 클래스 빈 인스턴스를 생성하는 실행의 FactoryBean 인터페이스를 쓰기;
  6. 모듈 형 빈 설정.
빈 정의 상속

우리는 제 1 장과 제 2 장에서 본, 콩 정의 된 응용 프로그램 컨텍스트 XML 파일은 빈 클래스와 그 종속 완전한 이름을 지정합니다. 일부 시나리오에서는 빈 정의를 만들기 위해 너무 오래, 당신은 다른 bean 정의 구성 정보에서 빈 정의 상속을 할 수 있습니다되지 않습니다. 이러한 시나리오는 MyBank 응용 프로그램 설명.

MyBank - 빈 정의 상속 예제

이전 장에서, 우리는 DAO를 통해 데이터베이스에 액세스 할 수 MyBank 응용 프로그램을 배웠습니다. MyBank DatabaseOperations 응용 프로그램을 가정하는 클래스가 데이터베이스와 상호 작용할 수 있습니다 정의, 모든 DAO MyBank 응용 프로그램은 다음과 같이 데이터베이스 작업을 수행 할 DatabaseOperations 클래스에 의존하고 있습니다.

영상

그림의 표시 FixedDepositDao DatabaseOperations 및 PersonalBankingDao 클래스는 클래스에 따라 달라집니다. 이 클래스의 다음 응용 프로그램 컨텍스트 XML 파일을 보여줍니다 빈 정의.

<bean id="databaseOperations"
    class="sample.spring.chapter01.bankapp.utils.DatabaseOperations"></bean>

<bean id="personalBankingDao" class="sample.spring.chapter01.bankapp.dao.PersonalBankingDaoImpl">
    <property name="databaseOperations" ref="databaseOperations" />
</bean>

<bean id="fixedDepositDao" class="sample.spring.chapter01.bankapp.dao.FixedDepositDaoImpl">
    <property name="databaseOperations" ref="databaseOperations" />
</bean>

상기 XML에서 personalBankingDao 및 정의 참조 DatabaseOperations 인스턴스 databaseOperations fixedDepositDao 빈 속성을 사용했다. 이 수단과 PersonalBankingDaoImpl FixedDepositDaoImpl setDatabaseOperations 클래스 용기 스프링 주입 DatabaseOperations 인스턴스를 허용하는 방법을 정의한다.

콩 복수의 어플리케이션 구성 (속성 생성자 매개 변수 등)의 공통 집합을 공유하는 경우, 당신은 다른 bean 정의는 부모 정의로, bean 정의를 만들 수 있습니다. personalBankingDao fixedDepositDao 콩 및 정의에서, 일반적인 구성은 databaseOperations의 숙박 시설이다. 다음 쇼 personalBankingDao fixedDepositDao 빈 정의와 방법은 부모 bean databaseOperations 속성에서 상속 정의합니다.

<bean id="databaseOperations" class="sample.spring.chapter03.bankapp.utils.DatabaseOperations"></bean>

<bean id="daoTemplate" abstract="true">
    <property name="databaseOperations" ref="databaseOperations" />
</bean>

<bean id="fixedDepositDao" parent="daoTemplate" class="sample.spring.chapter03.bankapp.dao.FixedDepositDaoImpl">
</bean>

<bean id="personalBankingDao" parent="daoTemplate" 
      class="sample.spring.chapter03.bankapp.dao.PersonalBankingDaoImpl"></bean>

하여 XML 이상에서 daoTemplate 빈은 fixedDepositDao personalBankingDao 빈을 정의하고 공유 일반적인 구성을 정의합니다. fixedDepositDao 및 personalBankingDao bean 정의는 databaseOperations 의존성, daoTemplate 빈 정의의 사용을 필요로하기 때문에 요소 databaseOperations 종속성을 정의합니다. 부모 속성 요소는 빈 정의 상속의 이름 구성을 지정합니다. 부모 속성 fixedDepositDao 및 personalBankingDao 빈 정의로 그들은 재산 databaseOperation daoTemplate bean 정의를 상속하므로, daoTemplate입니다.

요소의 추상적 인 특성 값이 true로 설정되어, bean 정의는 추상적이다. 위의 XML로, daoTemplate 콩 추상적 인 정의. 스프링 컨테이너는 해당 추상적 인 콩 빈 정의를 작성하려고 시도하지 않습니다 유의하시기 바랍니다.

注意:
    抽象 bean 不能作为其他 bean 定义的依赖项,也就是说,不能使用 <property> 或 <constructor-arg> 元素来引用抽象  bean 。

당신은 클래스의 특성을 지정하지 않습니다 주목 daoTemplate bean 정의가있을 수 있습니다. 상위 클래스의 특성 빈 정의를 지정하지 않은 경우에 서브 클래스 bean 정의 (예컨대 fixedDepositDao 및 personalBankingDao)의 특성을 지정하는 것이 필요하다. 당신은 클래스의 특성을 지정하지 않은 경우 Spring 컨테이너는 해당 빈 인스턴스를 만들려고하지 않도록, 당신은 추상 bean을 정의해야합니다.

상속 databaseOperations 속성 daoTemplate bean 정의 여부 fixedDepositDao 및 personalBankingDao 빈 정의를 확인합니다. 다음과 같은 자바 코드를 실행하십시오. 클래스 BankApp 주요 방법은 fixedDepositDao personalBankingDao 콩 및 방법, 및 DatabaseOperations 콩 통화에서 이러한 방법의 예를 호출합니다. 당신은 BankApp을 성공적으로 실행할 수있는 주요 방법을 알 수 있습니다. 예외를 throw하지 않고. 주입 fixedDepositDao DatabaseOperations 및 personalBankingDao 콩의 어떤 인스턴스는, 다음 코드는 java.lang.NullPointerException이 던져하지 않습니다.

package sample.spring.chapter03.bankapp;

import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import sample.spring.chapter03.bankapp.controller.FixedDepositController;
import sample.spring.chapter03.bankapp.controller.PersonalBankingController;
import sample.spring.chapter03.bankapp.domain.FixedDepositDetails;

public class BankApp {
    private static Logger logger = Logger.getLogger(BankApp.class);

    public static void main(String args[]) {
        ApplicationContext context = new ClassPathXmlApplicationContext(
                "classpath:META-INF/spring/applicationContext.xml");

        FixedDepositController fixedDepositController = context
                .getBean(FixedDepositController.class);
        fixedDepositController.submit(context
                .getBean(FixedDepositDetails.class).setDepositAmount(100)
                .setEmail("[email protected]").setId(1).setTenure(10));
        logger.info("Your fixed deposit details : " + fixedDepositController.get());

        PersonalBankingController personalBankingController = context
                .getBean(PersonalBankingController.class);
        logger.info(personalBankingController.getMiniStatement());
        
    }
}

그것이 작동하는 방법 다음 그림 쇼 fixedDepositDao 및 personalBankingDao bean 정의는 빈 정의 상속입니다

영상

도형 표시 정의 fixedDepositDao personalBankingDao 콩 및 유전 특성 databaseOperations (property 속성으로 식별하고 차단 fixedDeopsitDa personalBankingDao)로부터 daoTemplate 빈 정의한다. 그림은 또한 그가 abstract로 표시되어 있으므로 빈 인스턴스 스프링 컨테이너는 해당 정의 daoTemplate 빈을 만들려고하지 않습니다에 대해 설명합니다.

무엇 상속

자식 bean 정의는 부모 bean 정의를 구성 정보에서 상속 :

  1. 속성에 의해 원소 지정.
  2. 생성자의 매개 변수에 의해 원소 지정.
  3. 피복 방법은 (제 4, 5 참조)
  4. 초기화 및 파괴 방법 (제 5 장 참조)
  5. 공장 메소드에 의해 속성 요소 팩토리 메소드 지정 (섹션 2, 3, 학습 방법 빈을 생성하는 정적 및 인스턴스 공장 방법)

추천

출처www.cnblogs.com/train99999/p/11964898.html