겉바속촉
[spring] 생성자 + setter까지 주입해보기 본문
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
반응형
'IT일기(하반기) > SPRING' 카테고리의 다른 글
[spring] 어노테이션 연습하기 (0) | 2020.06.25 |
---|---|
[spring] 생성자, setter 주입 각각 연습하기 (0) | 2020.06.25 |
[spring] 생성자 주입해보기 (0) | 2020.06.25 |
[Spring] 자바와 스프링의 차이점 알아보기 (0) | 2020.06.25 |
[spring] 작업환경바꾸기 (0) | 2020.06.25 |