TIL 2021.09.28(화) Spring으로 DI 작성하기

개발중·2021년 9월 28일
0

Spring

목록 보기
1/11

DI는 의존성 주입으로, 하나의 소스 코드 내에서 이루어지는 것이 아닌 다른 구현체로부터 주입을 받는 것을 의미한다.

package sist.com.di.basic;

public class Book {
	private String name;
	private String writer;
	private String price;
	private int page;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getWriter() {
		return writer;
	}
	public void setWriter(String writer) {
		this.writer = writer;
	}
	public String getPrice() {
		return price;
	}
	public void setPrice(String price) {
		this.price = price;
	}
	public int getPage() {
		return page;
	}
	public void setPage(int page) {
		this.page = page;
	}
	@Override
	public String toString() {
		return "Book [name=" + name + ", writer=" + writer + ", price=" + price + ", page=" + page + "]";
	}
	
	 

}

자바 클래스로 도서와 관련된 객체를 생성하였다.

get()과 set(), toString()을 생성해 주었다.

이제 xml에서 Bean을 생성, 주입해 준다.

<?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="Book1" class="sist.com.di.basic.Book" scope="prototype">
<!-- prototype은 getBean을 할 때마다 생성 / singleton은 한 번만 생성 -->
	<property name="name" value="자바의 정석"></property>
	<property name="writer" value="남궁성"></property>
	<property name="price" value="26,300원"></property>
	<property name="page" value="1000"></property>
</bean>
</beans>

scope="" 타입 안에서 prototype은 getBean을 할 때마다 생성되는 것이고, singleton은 한 번만 생성되는 것이다.

singleton은 주소 값이 동일하고, prototype은 주소 값이 다르다.

beans 등의 태그는 xml 파일을 생성할 때 설정해 주거나 설정해 주지 못하고 생성하였을 때에는 해당 xml source 옆에 있는 namespaces에서 지정해 줄 수 있다.

package sist.com.di.basic;

import java.util.HashMap;
import java.util.Map;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class BookMain {
	
	public static void main(String[] args) {
		ApplicationContext context = new FileSystemXmlApplicationContext("src/main/java/sist/com/di/basic/bookdi.xml");
		
		Object o1=context.getBean("Book1");
		System.out.println(o1);
		System.out.println(((Book)context.getBean("Book1")).getName());
		
	}

}

스프링 컨테이너는 스프링의 빈을 생성하고 관리하는 곳이다. 종류로는 Bean Factory와 이것을 상속하는 ApplicationContext가 있다.

Bean 객체를 생성하고 관리하는 기능을 가지고 있다.

구현 함수로는 getBean()이 있다.

FileSystemXmlApplicationContext은 xml 파이로가 같은 설정 파일의 위치 경로를 문자열이나 문자열의 배열로 받아 파일을 로드한다. 그 파일의 bean에 담긴 값을 가지고 오는 것이다.

profile
공부한 것 정리하는 개발 입문자

0개의 댓글