Java/Spring

[Spring] 05. <bean> 속성 사용하기

담크 2021. 6. 18. 23:54

오늘은 <bean> 태그 안에 있는 속성들 중 c: 속성과 p:속성을 이용해 보려고 합니다.

com.test05 패키지부터 만들러 가봅시다~

Developer.java

package com.test05;

public class Developer {
	
	private Emp emp;
	private String dept;

	public Developer() {
	}
	public Developer(Emp emp, String dept) {
		this.emp = emp;
		this.dept = dept;
	}
	
	public Emp getEmp() {
		return emp;
	}
	public void setEmp(Emp emp) {
		this.emp = emp;
	}
	public String getDept() {
		return dept;
	}
	public void setDept(String dept) {
		this.dept = dept;
	}
	@Override
	public String toString() {
		return emp + " \t 부서 : " + dept;
	}
}

Emp.java

package com.test05;

public class Emp {
	
	private String name;
	private int salary;

	public Emp() {
	}
	public Emp(String name, int salary) {
		this.name = name;
		this.salary = salary;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getSalary() {
		return salary;
	}
	public void setSalary(int salary) {
		this.salary = salary;
	}
	@Override
	public String toString() {
		return "이름 : " + name + " \t 월급 : " + salary;
	}
}

Engineer.java

package com.test05;

public class Engineer {
	
	private Emp emp;
	private String dept;
	
	public Engineer() {
	}
	public Engineer(Emp emp, String dept) {
		this.emp = emp;
		this.dept = dept;
	}
	public Emp getEmp() {
		return emp;
	}
	public void setEmp(Emp emp) {
		this.emp = emp;
	}
	public String getDept() {
		return dept;
	}
	public void setDept(String dept) {
		this.dept = dept;
	}
	@Override
	public String toString() {
		return emp + " \t 부서 : " + dept;
	}
}

MTest.java

package com.test05;

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

public class MTest {
	
	public static void main(String[] args) {
		ApplicationContext factory = new ClassPathXmlApplicationContext("com/test05/applicationContext.xml");
		
		Developer lee = factory.getBean("lee-ss", Developer.class);
		Engineer hong = (Engineer) factory.getBean("hong-gd");
		
		System.out.println(lee);
		System.out.println(hong);
	}

}

여기까지는 전과 비슷한 코드양식인 것을 볼 수 있는데요

 

**여기가 중요합니다. 

applicationContext.xml을 만들 때 

여기서 Finish가 아닌 Next를 누르게 되면 

이런 창이 하나가 더 나오는데 위의 사진처럼 c와 p에 체크를 하고 Finish를 눌러줍니다.

그러면 전과 다르게

applicationContext에 이렇게 2개의 속성이 추가가 된것을 확인할 수 있습니다!!

 

그럼 이제 나머지 코드 작성해 볼게요

applicationContext.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"
	xmlns:c="http://www.springframework.org/schema/c"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="lee" class="com.test05.Emp" c:name="이순신" c:salary="3000000" />
	<bean id="lee-ss" class="com.test05.Developer" c:emp-ref="lee" c:dept="개발팀" />
	
	<bean id="hong" class="com.test05.Emp" p:name="홍길동" p:salary="2500000" />
	<bean id="hong-gd" class="com.test05.Engineer" p:emp-ref="hong" p:dept="기술팀" />
</beans>

코드 실행결과

 

 

어떤가요? 전에 코드와 비교해봤을 때 무슨 차인지 아시겠나요? ㅎㅎ

간단히 비교할 수 있게 써보면

(지금 비교할 2개의 코드는 앞에 Emp, Developer, Engineer 이 3개의 클래스가 동일하게 기본생성자, setter 생성자가 들어가 있습니다.)

<bean id="lee" class ="com.test04.Emp">
	<constructor-arg name="name" value="이순신"/>
	<constructor-arg name="salary" value="3000000"/>
</bean>

<bean id="lee-ss" class ="com.test04.Developer">
	<constructor-arg name="emp" ref="lee"/>
	<constructor-arg name="dept" value="개발"/>
</bean>

이 부분과 

<bean id="lee" class="com.test05.Emp" c:name="이순신" c:salary="3000000" />
<bean id="lee-ss" class="com.test05.Developer" c:emp-ref="lee" c:dept="개발팀" />

이 부분이 같다고 보시면 됩니다.

간단히 생각하면 c:가 의미하는 것은 <constructor-arg>라고 보시면 됩니다.(동일한 의미입니다)

 

그렇다면 

<bean id="hong" class ="com.test04.Emp">
	<property name="name" value="홍길동"/>
	<property name="salary" value="2500000"/>
</bean>

<bean id="hong-gd" class ="com.test04.Engineer">
	<property name="emp" ref="hong"/>
	<property name="dept" value="기술"/>
</bean>

 

<bean id="hong" class="com.test05.Emp" p:name="홍길동" p:salary="2500000" />
<bean id="hong-gd" class="com.test05.Engineer" p:emp-ref="hong" p:dept="기술팀" />

위의 2개의 코드를 보고 알 수 있는것은

p:는 <property>와 동일한 의미를 가진다는 것입니다.

 

 

 

 

 


꿀팁 아닌 꿀팁을 잠깐 말해보자면

만약 applicationContext.xml을 만들 때 습관적으로 Finish를 눌러 바로 만들어 버렸다면

그림과 같이 빨간 네모 부분에 Namespaces라는 부분을 눌러주시면

아까 처음만들때와 동일한 창이 나오는것을 볼 수 있는데요.

여기서 c태그와 p태그를 클릭하셔도 만들때와 동일하게 applicationContext에 적용이 됩니다.