Spring 특징
Spring DI-IoC
IoC (Inversion of Control)
프로그램을 제어하는 패턴 중 하나
미리 객체를 생성하고 등록하여 필요할 때 마다 가져오는 방식
DI (Dependency Injection)
객체 등록 및 의존성 주입
GenericXmlApplicationContext(’xml파일’)을 통해서 객체를 등록 가능
src/main/resources에 있는 xml에서 객체들의 의존성을 property 와 constructor-arg 태그를 이용하여 의존성을 주입할 수 있음
생성자와 setter를 통해서 의존성 주입 가능
property 태그와 constructor-arg 태그를 통해 의존성 주입
의존성 주입 예제 코드
<?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">
<!-- Spring container에 디자인한 객체 클래스 등록 -->
<bean id="test" class="basic.SpringTest" />
<!-- 호텔 객체와 의존 객체들의 빈 등록 및 의존성 주입 -->
<bean id="chef" class="basic.ex01.Chef" />
<bean id="res" class="basic.ex01.Restaurant">
<property name="chef" ref="chef"/>
<!-- ref에는 등록한 객체의 id를 지정하고 name은 set을 제외한 setter메서드의 이름을 작성 -->
</bean>
<!-- property name = "set을 제외한 setter 메서드의 이름"
setter 메서드의 이름은 대부분 관례적으로 set + 멤버변수 이름이기 때문에
변수명이라고 편하게 작성 -->
<bean id="hotel" class="basic.ex01.Hotel">
<constructor-arg ref="res"></constructor-arg>
<!-- 생성자의 매개값으로 주입 -->
</bean>
</beans>
의존성 주입 예시
package basic.ex01;
import org.springframework.context.support.GenericXmlApplicationContext;
public class MainClass {
public static void main(String[] args) {
Chef chef = new Chef();
Restaurant res = new Restaurant();
// 쉐프 지정
res.setChef(chef);
// 호텔에 레스토랑 지정
Hotel h = new Hotel(res);
// 호텔 생성
// 위와 같이 하면 연쇄적으로 객체간 연쇄적으로 명령 수행 가능
h.reserveRestaurant();
// 호텔에 명령 내림
// 기존에는 이렇게 생성
// Spring에서는 이렇게 생성하지 않고
// test-config.xml에 넣어놓으면 훨씬 편하게 필요할 때 가져올 수 있음
// hotel만 불러서 필요할 때 불러올 수 있음
System.out.println();
System.out.println("Spring 객체 불러오기 및 의존성 주입 확인");
System.out.println();
GenericXmlApplicationContext ct = new GenericXmlApplicationContext("classpath:test-config.xml");
Hotel hotel = ct.getBean("hotel", Hotel.class);
// test-config.xml에서 hotel이라는 값을 불러옴
hotel.reserveRestaurant();
// Hotel 클래스에 있는 메소드 가져올 수 있음
// 미리 등록했고 의존성도 주입했기 때문
// 필요할 때 꺼내올 수 있다는 것을 확인
}
}
<?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">
<!-- Spring container에 디자인한 객체 클래스 등록 -->
<bean id ="test" class="basic.SpringTest"/>
</beans>