Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Kim Hyeong

스프링 DI(Dependency Injection) 1 본문

Spring

스프링 DI(Dependency Injection) 1

김형완 2018. 8. 20. 15:13

생성자를 이용한 DI 설정


package com.spring4.practice01;


public interface Car {

public String brand();

}


package com.spring4.practice01;

public class CarHDImpl implements Car {

public String brand(){

return "자동차는 현대자동차 소나타입니다.";

}

}


Car 인터페이스를 구현한 CarHDImpl을 만든다.


package com.spring4.practice01;

import org.springframework.beans.factory.annotation.Autowired;

public class Service {

private Car car;

public Service(){}     // 생성자

public Service(Car car){    // 파라미터 생성자

this.car = car;

}

public void print(){

System.out.println("brand: "+car.brand());

}

}


Service 클래스를 만들어고 아래의 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="car" class="com.spring4.practice01.CarHDImpl" />

<bean id="service" class="com.spring4.practice01.Service">

<constructor-arg ref="car" />

</bean>


</beans>


bean을 이용해 CarHDImpl 클래스를 빈 객체로 생성(인스턴스) 한다.


public Service(Car car){


this.car = car;


}




위 예제처럼  생성자를 이용해서 빈 객체를 생성할 경우 설정파일에

<constructor-arg ref="car" />

constructor-arg을 이용해서 만든다. 

ref (reference)은 위 CarHDImpl 클래스의 id값을 적어준다. ref의 속성값으로 car를 지정했는데 이는 곧 이름이 car인 다른 빈 객체를 생성자에 전달하라는 의미이다. 



package com.spring4.practice01;


import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.GenericXmlApplicationContext;


public class MainCar {

public static void main(String[] args) {

ApplicationContext ctx = new GenericXmlApplicationContext("classpath:carBean.xml");

Service service = ctx.getBean("service",Service.class);


service.print();

}

}


GenericXmlApplicationContext 클래스를 이용해서 스프링 컨테이너를 생성한다.

컨테이너 생성 후 getBean() 메서드를 이용해서 사용할 객체를 구한다.


ctx.getBean("service",Service.class); 

getBean() 메소드에서 볼드체로 된 첫번째 파라미터 "service" 부분은 Xml 설정파일 <bean>태그의 id 속성값을 적어주면 된다.

두번째 파라미터 (Service.class)는 검색할 빈 객체의 타입이다.




'Spring' 카테고리의 다른 글

유효성 검사  (0) 2018.08.21
스프링 DI(Dependency Injection) 2  (0) 2018.08.20
스프링 MVC 흐름과 주요 구성 컴포넌트  (0) 2018.08.16
Spring Framework의 기본적인 개념  (0) 2018.08.10
DI의 Life Cycle  (0) 2018.08.10
Comments