# 의존성 주입 : DI(Dependency Injection) -Setter DI 주입 

    - Spring 의존성 주입 중 Setter를 통한 방법.

# 수행 과제 

    - 학생들의 정보를 setter 방식을 통해서 주입하는 과정을 알아보도록 하겠습니다.

 


1. Package SetterDI , StudentTestBean.java , StudentData.java 생성

   - 패키지 SetterDI는 Student에 관한 Bean을 생성한다.

   - StudentTestBean.java는 학생의 이름, 학번, 학점 변수와 학생의 정보 객체을 가진다.

   - StudentData.java는 학생의 정보 주소를 가진다.

package SetterDI;

public class StudentTestBean {

	private String stuName; // 학생 이름
	private int stuNum; // 학생 번호
	private double stuGrade; // 학생 점수
	private StudentData stuData;

	public String getStuName() {
		return stuName;
	}

	public void setStuName(String stuName) {
		this.stuName = stuName;
	}

	public int getStuNum() {
		return stuNum;
	}

	public void setStuNum(int stuNum) {
		this.stuNum = stuNum;
	}

	public double getStuGrade() {
		return stuGrade;
	}

	public void setStuGrade(double stuGrade) {
		this.stuGrade = stuGrade;
	}

	public StudentData getStuData() {
		return stuData;
	}

	public void setStuData(StudentData stuData) {
		this.stuData = stuData;
	}
}

 

 

package SetterDI;

public class StudentData {
	private String address; // 학생주소

	public void setAddress(String address) {
		this.address = address;
	}
	
	public String getAddress() {
		return address;
	}
}
​

 


2. StudentBeans.xml 생성

   - StudentBeans.xml에서는 stuTest1, stuTest2 객체를 생성한다.

      - stuTest1의 학생 정보를 입력하고, StudentData는 bean 객체를 생성한다.

      - stuTest2의 학생 정보를 입력하고, StudentData는 bean 객체를 참조해서 생성한다.

         - 객체 생성시 property에 name을 명시하여, 넣을 변수에 알맞은 값을 value에 넣는다.

<?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 값으로 객체를 불러올 거라 bean id 값을 부여하였습니다. -->
	<bean id="stuTest1" class="SetterDI.StudentTestBean"
		lazy-init="true">
		<property name="stuName" value="이름1"></property>
		<property name="stuNum" value="205012000"></property>
		<property name="stuGrade" value="2.2"></property>
		<!-- studentData를 bean을 생성을 통해서 명시 -->
		<property name="stuData">
			<bean class="SetterDI.StudentData">
				<property name="address" value="제주"></property>
			</bean>
		</property>
	</bean>

	<bean id="stuTest2" class="SetterDI.StudentTestBean"
		lazy-init="true">
		<property name="stuName" value="이름2"></property>
		<property name="stuNum" value="205012100"></property>
		<property name="stuGrade" value="4.5"></property>
		<!-- studentData를 bean을 id를 참조를 통해서 명시 -->
		<property name="stuData" ref="stuBasicData"></property>
	</bean>

	<!-- studentData의 기본형  -->
	<bean id="stuBasicData" class="SetterDI.StudentData"
		scope="prototype">
		<property name="address" value="서울"></property>
	</bean>

</beans>

 

 


3. Main.java 

   - StudentBeans.xml에서는 stuTest1, stuTest2 객체를 생성한다.

   - stuTest1의 학생 정보를 입력하고, StudentData는 bean 객체를 생성한다.

   - stuTest2의 학생 정보를 입력하고, StudentData는 bean 객체를 참조해서 생성한다.

 

package main;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import SetterDI.StudentData;
import SetterDI.StudentTestBean;

public class Main {

	public static void main(String[] args) {
		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("config/SetterBeans.xml");
		System.out.println("--------------------------");

		// getter를 통해서 setter을 통해서 주입한 데이터를 가져온다.
		
		// student stuTest1 의 정보 출력
		StudentTestBean stb1 = ctx.getBean("stuTest1", StudentTestBean.class);
		System.out.println("stuTest1 name => " + stb1.getStuName());
		System.out.println("stuTest1 num => " + stb1.getStuNum());
		System.out.println("stuTest1 grade => " + stb1.getStuGrade());
		System.out.println("stuTest1 address => " + stb1.getStuData().getAddress());
		// 또는 StudentData stuData= stb1.getStuData(); stuData.getAddress(); 하는 방법도 있다.
		System.out.println("--------------------------");

		// student stuTest2 의 정보 출력
		StudentTestBean stb2 = ctx.getBean("stuTest2", StudentTestBean.class);
		System.out.println("stuTest2 name => " + stb2.getStuName());
		System.out.println("stuTest2 num => " + stb2.getStuNum());
		System.out.println("stuTest2 grade => " + stb2.getStuGrade());
		System.out.println("stuTest2 address => " + stb2.getStuData().getAddress());

		ctx.close();
		System.out.println("--------------------------");
		System.out.println("-ctx.close() 됨");
	}
}

4. 결과화면


 

블로그 이미지

미나미나미

,