Spring DI

개발세발·2024년 2월 13일

xml로 의존성 주입

  • setter를 통한 의존성 주입
car.setColor("red");
car.setOil(100);
car.setEngine(engine);
car.setDoors(new Door[]{ac.getBean("door", Door.class), ac.getBean("door", Door.class)});
  • setter 메소드를 통해 주입하는 방식을 xml의 <property>태그로 구현할 수 있음.
<property name="color" value="red"/>
<property name="oil" value="100"/>
<property name="engine" ref="engine"/>
<property name="doors">
	<array value="com.fastcampus.ch3.Door">
    	<ref bean="door/>
        <ref bean="door/>
    </array>
</property>
  • name에 해당하는 값에 value를 부여하고, oil은 자동으로 int로 바뀜.
  • 기본형이나 스트링일 경우만 value를 사용하고 나머지는 참조형이므로 ref를 사용.
  • engine의 경우 bean에 등록된 엔진을 사용한다.
  • doors는 여러 개이므로 array를 사용하여 생성.
  • property는 setter를 호출하는 함수이므로 setter가 반드시 있어야 함.

생성자를 사용하기

  • 기본 생성자는 반드시 만들어 주어야 한다.
       <constructor-arg name="color" value="red"/>
        <constructor-arg name="oil" value="100"/>
        <constructor-arg name="engine" ref="engine"/>
        <constructor-arg name="doors">
            <array value-type="com.fastcampus.ch3.Door">
                <ref bean="door"/>
                <ref bean="door"/>
            </array>
        </constructor-arg>
  • property 대신에 constructor를 사용하면 된다.

컴포넌트 스캔 태그

    <context:component-scan base-package="com.fastcampus.ch3">
        <context:exclude-filter type="regex" expression="com.fastcampus.ch3.diCopy*.*"/>
    </context:component-scan>
  • component-scan 태그를 사용하면 패키지 내에 있는 @Component가 붙은 클래스들을 빈으로 자동으로 등록해준다.

@Autowired의 특징: by Type으로 먼저 검색 후 여러 개면 by Name으로 검색

0개의 댓글