Spring의 DI에 대해 ②

7656 단어 자바spring

이 기사의 목적



Spring의 DI에 대해 ①
계속됩니다.

이 기사의 범위



구성에 대해 주로 다루기

Configuration이란?



Bean 정의 파일

기능


  • DI 컨테이너에 대해 [어느 인스턴스] [어느 초기 값]으로 전달할지 정의하는 빈과 DI 컨테이너의 브리지 역할을합니다.
  • ORM의 매핑 파일에 가까울 수 있습니다
  • DI의 기본적인 기능인 【오브젝트의 정보를 외부에 가지는】라고 하는 것이지만【외부】그 자체라고 말할 수 있다
  • 소스 코드에서 객체의 상태를 흩어지기보다는 이러한 파일에 함께 배치하면 유지 보수가 쉬워집니다



  • 종류


  • Java 클래스 또는 XML 파일과 둘 다 어노테이션을 결합한 네 가지 유형이 있습니다.

    Java 기반Configuration

    JavaConfig.java
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class HogeConfig {
        @Bean
        HogeService hogeService() {
            return new HogeService():
        }
    
        @Bean
        AAABean aAABean() {
            return new AAABean(hogeService());
        }
    
        @Bean(name = "bBean")
        BBBBean bBBBean() {
            return new bBBBean();
        }
    }
    
  • Configuration 클래스에 @Configuration 어노테이션을 명시적으로 부여한다
  • 여러 주석을 부여 할 수도 있습니다
  • 각 메소드에 인수를 추가하여 다른 Bean을 참조 할 수 있습니다.
  • 명시 적으로 Bean 이름을 정의 할 수도 있습니다 (name = "hoge") DI 컨테이너에서 인스턴스를 getBean 할 때 사용하십시오.

    XML 기반Configuration

    xmlConfig.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http;//www.springframework.org/schema/beans/spring-beans.xsd">
        <bean id="hogeService" class="jp.co.hogeProgram.HogeService" />
    
        <bean id="aAABean" class="jp.co.hogeProgram.AAABean">
            <constructor-arg ref="hogeService"/>
        </bean>
    
        <bean id="bBean" class="jp.co.hogeProgram.BBBBean>
            <constructor-arg value="aaa"/>
        </bean>
    </beans>
    
  • Bean 요소 내에서 Bean을 정의합니다.
  • constoructor-arg에서 다른 빈과 스칼라 값을 전달할 수도 있습니다

  • 이상 2개는 각각 Bean의 수만큼 정의를 써야 하기 때문에, 번거롭기 때문에, 다음의 어노테이션 베이스를 조합해 DI를 실시하는 것이 일반적이다

    주석 기반Configuration

    Bean

    Hoge.java
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    @Component
    public class Hoge {
    
        オートワイヤリング
        このアノテーションの記述によりFugaServiceをDIコンテナから自動的にBeanを取ってくる
        @Autowired
        public Hoge(FugaService fuga);
    
        処理を記述
    }
    

    Config 클래스 (xml 생략)
    이 경우 jp.co.hoge 이하의 클래스를 찾습니다.

    AppCongig.java
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    @ComponentScan("jp.co.hoge")
    public class AppConfig {
    
    }
    
  • 「컴포넌트 스캔」에 의해 @Component 어노테이션이 부여된 클래스를 자동적으로 DI 컨테이너에 설정할 수 있다. 이것을 "자동 와이어링"이라고합니다
  • 어노테이션은 @Component 뿐만 아니라 @Service 등 클래스의 역할에 의해 복수 존재하지만, 기본적으로 @Component 와 같다
  • 컴퍼넌트 스캔을 유효하게 하려면 , Config 클래스 orXML에 @ComponentScan ("패키지"), 혹은 context:component-scan 요소에 패키지를 기재하면 찾기
  • 스캔 범위의 패키지가 넓을수록 시간이 걸리므로 적절한 범위를 설정해야합니다

  • 다음 번 예고



    Bean의 연결에 대해 할 예정입니다.

    좋은 웹페이지 즐겨찾기