겉바속촉

[spring] 생성자 + setter까지 주입해보기 본문

IT일기(하반기)/SPRING

[spring] 생성자 + setter까지 주입해보기

겉바속촉 2020. 6. 25. 12:52
728x90
반응형

우리가 차이점을 알아야합니다

 

 

우선 생성자로 주입 할때
-value


setter로 주입 할때
-value
-name

 

 


 

이제 시작해볼게요:)

 

각각 다음처럼 패키지랑 클래스 생성해주세요

 

 

PersonData.java

 

구조는 변수 선언 후에 디폴트 생성자 만들어놨습니다

그리고 자동완성으로 get, set 해주시면 됩니다

 

package spring.day0625.ex3;

public class PersonData {
	
	private String sawonname;
	private int pay;
	private String ipsaday;
	
	//디폴트생성자
	PersonData() {
		
	}
	
	
	//사원명은 생성자로 주입
	PersonData(String sname) {
		sawonname=sname;
				
	}


	//페이, 입사데이는 setter로 주입
	
	public int getPay() {
		return pay;
	}


	public String getSawonname() {
		return sawonname;
	}


	public void setSawonname(String sawonname) {
		this.sawonname = sawonname;
	}


	public void setPay(int pay) {
		this.pay = pay;
	}


	public String getIpsaday() {
		return ipsaday;
	}


	public void setIpsaday(String ipsaday) {
		this.ipsaday = ipsaday;
	}
		

}

 

Person.java

 

여기서는 위에서 만들어준 클래스 PersonData를 가져와서 data라고 선언을 해줄거에요

그래서디폴트 생성자 Person에 넣어주시는 거쥬!!

package spring.day0625.ex3;

public class Person {
	PersonData data; //클래스를 가져와 멤버로
	
	public Person(PersonData data) {
		super();
		this.data=data;
	}
	
	//출력문메소드
	public void writeData()
	{
		System.out.println("사원명: "+data.getSawonname());
		System.out.println("급여: "+data.getPay());
		System.out.println("입사일: "+data.getIpsaday());
		
	}

}

 

 

appContext3.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-4.3.xsd">


	<!-- personData설정 -->
	<bean name="pdata" class="spring.day0625.ex3.PersonData">
		<!-- 생성자 주입 -->
		<constructor-arg value="강호동"></constructor-arg>
		<!-- 급여, 입사일은 setter 주입 -->
		<property name="pay" value="2300000"/>
		<property name="ipsaday" value="2011-12-12"/>
	</bean>
	
	<!-- person설정 -->
	<bean name="per" class="spring.day0625.ex3.Person">
	
	<!-- ref태그는 bean의 이름이나 id로 찾는다 -->
		<constructor-arg ref="pdata"/>
	</bean>

</beans>

 

 

PersonMain.java

 

package spring.day0625.ex3;

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

public class PersonMain {
	
	public static void main(String[] args) {
		
		ApplicationContext app3=new ClassPathXmlApplicationContext("spring/test2/appContext3.xml");
		
		Person pp=app3.getBean("per", Person.class);
		pp.writeData();
		
	}

}

 

즉 우리가 자바에서 상속을 배웠을 때의 개념을 떠올리시면 조금 수월합니다:)

 

1. 우리가 persondata를 pdata로 네이밍해준것이구요

2. 그 pdata를 person으로 가져오는 거에요 ---> 클래스를 가져와서 멤버로 사용

3. 그러면 person이 persondata를 상속받았다고 생각해주고

   personmain에서는 getbean으로 가져올 때 per이라고 해야겠죠.

 

 

 

 

appContext3.xml

 

 

 

 

그리고 그것을 출력해야 할때는

getBean으로 받아온다고 생각하시면 됩니다

저는 방법 1, 방법2 두가지로 출력문 작성했습니다

그래도 결과는 동일하게 나와야겠쥬?!

 

전체 코드블럭

 

PersonData.java

package spring.day0625.ex3;

public class PersonData {
	
	private String sawonname;
	private int pay;
	private String ipsaday;
	
	//디폴트생성자
	PersonData() {
		
	}
	
	
	//사원명은 생성자로 주입
	PersonData(String sname) {
		sawonname=sname;
				
	}


	//페이, 입사데이는 setter로 주입
	
	public int getPay() {
		return pay;
	}


	public String getSawonname() {
		return sawonname;
	}


	public void setSawonname(String sawonname) {
		this.sawonname = sawonname;
	}


	public void setPay(int pay) {
		this.pay = pay;
	}


	public String getIpsaday() {
		return ipsaday;
	}


	public void setIpsaday(String ipsaday) {
		this.ipsaday = ipsaday;
	}
		

}

 

appContext3.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-4.3.xsd">


	<!-- personData설정 -->
	<bean name="pdata" class="spring.day0625.ex3.PersonData">
		<!-- 생성자 주입 -->
		<constructor-arg value="강호동"></constructor-arg>
		<!-- 급여, 입사일은 setter 주입 -->
		<property name="pay" value="2300000"/>
		<property name="ipsaday" value="2011-12-12"/>
	</bean>
	
	<!-- personData2설정 -->
	<bean name="pdata2" class="spring.day0625.ex3.PersonData">
		<!-- 3개의 멤버 모두 setter주입 -->
			<property name="sawonname" value="이주현"/>
			<property name="pay" value="1500000"/>
			<property name="ipsaday" value="2012-12-11"/>
	</bean>
	
	
	<!-- person설정 -->
	<bean name="per" class="spring.day0625.ex3.Person">
	
	<!-- ref태그는 bean의 이름이나 id로 찾는다 -->
		<constructor-arg ref="pdata"/>
	</bean>
	
	<!-- person2설정 -->
	<bean name="per2" class="spring.day0625.ex3.Person">
		<constructor-arg ref="pdata2"/>
	
	</bean>

</beans>

 

PersonMain.java

package spring.day0625.ex3;

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

public class PersonMain {
	
	public static void main(String[] args) {
		
		ApplicationContext app3=new ClassPathXmlApplicationContext("spring/test2/appContext3.xml");
		
		Person pp=app3.getBean("per", Person.class);
		pp.writeData();
		
		Person pp2=app3.getBean("per2", Person.class);
		pp2.writeData();
		
		Person pp3=(Person)app3.getBean("per2");
		pp3.writeData();
	}

}
728x90
반응형