오늘은 <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에 적용이 됩니다.
'Java > Spring' 카테고리의 다른 글
[Spring] 06. applicationContext의 내부구조(Factory 패턴) (0) | 2021.06.20 |
---|---|
[Spring] Namespace가 안 나올 때 (0) | 2021.06.19 |
[Spring] 04. 생성된 객체 가져오기 (0) | 2021.06.16 |
[Spring] 03. Singleton(싱글톤)으로 객체 선언하기 (0) | 2021.06.14 |
[Spring] 02. bean 객체 생성하기(02) (0) | 2021.06.12 |