본문 바로가기
Spring/신입SW인력을 위한 실전 자바Java 스프링Spring

스프링Spring 동영상과정 제 05강

by life grow 2023. 6. 10.

DI: 의존 주입

자바 파일을 통해서 주입 할 수도 있다.

 

 

생성자에서 parameter를 갖고 있을 경우

"<constructor-arg>": 생성자 parameter를 써준다.

 

구조)

xml 파일이다.

생성자를 이용할 때
1번 방법
<constructor-arg>
	<value>홍길동</value>
</constructor-arg>

2번 방법
<constructor-arg value=""/>

setter를 이용할 때
<property name="">
	<value></value>
</property>

 

<bean id="studentInfo" class="com.javalec.ex.StudentInfo">
	<constructor-arg>
    	<ref bean="student1"/>   <얘는 누굴 참조하나? Student클래스로부터 나온 객체둘 중 하나를
    </constructor-arg>			  참조하면 된다. Student1, Student2 
</bean>

 

예제 코드

MainClass.java

package com.fastcampus.ch2;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

public class MainClass {
	public static void main(String[] args) {

		String configLocation = "classpath:applicationCTX.xml";
		AbstractApplicationContext ctx = new GenericXmlApplicationContext(configLocation);
		StudentInfo studentInfo = ctx.getBean("studentInfo", StudentInfo.class);
		studentInfo.getStudentInfo();
		
		Student student2 = ctx.getBean("student2", Student.class);
		studentInfo.setStudent(student2);
		studentInfo.getStudentInfo();
		
		ctx.close();
	}
}
Student.java

package com.fastcampus.ch2;

import java.util.ArrayList;

public class Student {
	
	private String name;
	private String age;
	private String gradeNum;
	private String classNum;
	
	public Student(String name, String age, String gradeNum, String classNum) {
		this.name = name;
		this.age = age;
		this.gradeNum = gradeNum;
		this.classNum = classNum;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public String getGradeNum() {
		return gradeNum;
	}

	public void setGradeNum(String gradeNum) {
		this.gradeNum = gradeNum;
	}

	public String getClassNum() {
		return classNum;
	}

	public void setClassNum(String classNum) {
		this.classNum = classNum;
	}
}
StudentInfo.java

package com.fastcampus.ch2;

import java.util.ArrayList;

public class StudentInfo {
	
	private Student student;
	
	public StudentInfo(Student student) {
		this.student = student;
	}
	
	public void getStudentInfo() {
		if(student != null) {
			System.out.println("이름:" + student.getName());
			System.out.println("이름:" + student.getAge());
			System.out.println("이름:" + student.getGradeNum());
			System.out.println("이름:" + student.getClassNum());
			System.out.println("=========================");
		}
	}
	
	public void setStudent(Student student) {
		this.student = student;
	}
}
applicationCTX.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="student1" class="com.fastcampus.ch2.Student">
		<constructor-arg>
			<value>홍길동</value>
		</constructor-arg>
		<constructor-arg>
			<value>10살</value>
		</constructor-arg>
		<constructor-arg>
			<value>3학년</value>
		</constructor-arg>
		<constructor-arg>
			<value>20번</value>
		</constructor-arg>
	</bean>	
	
	<bean id="student2" class="com.fastcampus.ch2.Student">
		<constructor-arg value="홍길동"/>
		<constructor-arg value="9살"/>
		<constructor-arg value="2학년"/>
		<constructor-arg value="10번"/>
	</bean>
	
	<bean id="studentInfo" class="com.fastcampus.ch2.StudentInfo">
		<constructor-arg>
			<ref bean="student1"/>
		</constructor-arg>
	</bean>
</beans>

 

자바 코드는 건들지 않고 xml 파일만 건드려서  pencil이 설정되기 위한 클래스 파일이 어떤건지

xml 파일에서 클래스만 바꿔주면 된다.

(bean id ="pencil" class="com.javalec.ex.Pencil6B")

pencil은 안바뀜. com.javalec.ex.Pencil6B 여기만 바뀜