[Spring] μ€νλ§ XML μ€μ νμΌ μμ± λ°©λ² μ 리
[Spring] μ€νλ§ XML μ€μ νμΌ μμ± λ°©λ² μ 리
π λͺ©μ°¨
1. μ€νλ§ XML μ€μ νμΌ ν¬λ§·
- κΈ°λ³Έ ν¬λ§·
- μ λ Έν μ΄μ μ€μ μ μ¬μ©νκΈ° μν ν¬λ§·
2. λΉ(Bean) μ€μ μμ
- μλ μ£Όμ μ€μ - autowire μμ±
3. DI(Dependency Injection) μ€μ
- μμ±μ μ£Όμ
- νλ‘νΌν° μ£Όμ
- νλ‘νΌν° μ£Όμ - List νμ
- νλ‘νΌν° μ£Όμ - Set νμ
- νλ‘νΌν° μ£Όμ - Map νμ
- νλ‘νΌν° μ£Όμ - Properties νμ
4. ApplicationContext κ°μ²΄ μμ±
- μ€νλ§ XML μ€μ νμΌμ΄ ν κ°μΈ κ²½μ°
- μ€νλ§ XML μ€μ νμΌμ΄ μ¬λ¬ κ°μΈ κ²½μ°
- μ€νλ§ XML μ€μ νμΌμ΄ μ¬λ¬ κ°μΈ κ²½μ°(import νκ·Έ μ¬μ©)
1. μ€νλ§ XML μ€μ νμΌ ν¬λ§·
κΈ°λ³Έ ν¬λ§·
π λΉ λ±λ‘, λΉ μ€μ μ λͺ¨λ 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">
</beans>
μμ κ°μ λ€μ μ€νμ΄μ€μ μ€ν€λ§ μμ±μ κ°λ <beans> νκ·Έ μμ μ€νλ§ λΉ μ€μ μ μμ±νλ€.
μ λ Έν μ΄μ μ€μ μ μ¬μ©νκΈ° μν ν¬λ§·
π λΉ λ±λ‘μ XML, λΉ μ€μ μ μλ° μ λ Έν μ΄μ μΌλ‘ ν κ²½μ° μ΄ ν¬λ§·μ μ¬μ©νλ€.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
</beans>
context λ€μ μ€νμ΄μ€μ <context:annotation-config/> μ½λλ₯Ό μΆκ°νλ©΄ λΉ μ€μ μ XML νμΌμ΄ μλ λΉ ν΄λμ€μ μ λ
Έν
μ΄μ
μ κ²μν΄ λ°μνλ€.
2. λΉ(Bean) μ€μ μμ
<bean> νκ·Έλ₯Ό μ΄μ©ν΄ λΉμ μ μνλ€.
<bean id="studentDao" class="ems.member.dao.StudentDao" />
<bean> νκ·Έμ νμ μμ±μ class μμ± νλ λΏμ΄λ€.
idλ λΉμ idλ₯Ό ν΅ν΄ μ°Έμ‘°ν κ²½μ°κ° μλ κ²½μ°μλ§ μ€μ νλ©΄ λλ€.
μλ° μ½λμμ getBean()μΌλ‘ λΉμ κ°μ Έμ€λμ§, μ£Όμ μ€μ μμ ref μμ±μΌλ‘ λΉμ μ°Έμ‘°νλ κ²½μ°μ΄λ€.
id, class μΈμλ lazy-init, scope, primary, init-method, destroy-method μμ±μ΄ μλ€.
- id : λΉ μ΄λ¦(id) μ€μ
- class : λΉ νμ μ€μ
- scope : λΉμ scope μ€μ . singleton/prototype
- primary : trueλ₯Ό μ§μ νμ¬ κ°μ νμ μ λΉμ΄ μ¬λ¬κ° μΌλ μ°μ μ μΌλ‘ μ¬μ©ν λΉ μ€μ
- lazy-init : trueλ₯Ό μ§μ νμ¬ λΉμ μ¬μ©ν λ κ°μ²΄κ° μμ±λλλ‘ μ€μ
- init-method : λΉ κ°μ²΄κ° μμ±λ λ νΈμΆν λ©μλ μ€μ
- destroy-method : λΉ κ°μ²΄κ° μλ©Έλ λ νΈμΆν λ©μλ μ€μ
μλ μ£Όμ μ€μ - autowire μμ±
ν΄λμ€μ μ°Έμ‘° νμ νλμ νν΄μ autowire μμ±μ μ¬μ©ν΄ μλ μ£Όμ λλλ‘ μ€μ ν μ μλ€.
XML μ€μ νμΌ
<bean id='obj2' class='com.atoz_develop.beans.TestBean1' autowire="byName"/>
<bean id='data1' class='com.atoz_develop.beans.DataBean1'/>
<bean id='data2' class='com.atoz_develop.beans.DataBean1'/>
<bean>μ autowire μμ±μ "byName"μ μ€μ νλ€.
μλ° μ½λ
public class TestBean1 {
private DataBean1 data1;
private DataBean1 data2;
public DataBean1 getData1() {
return data1;
}
public void setData1(DataBean1 data1) {
this.data1 = data1;
}
public DataBean1 getData2() {
return data2;
}
public void setData2(DataBean1 data2) {
this.data2 = data2;
}
}
TestBean1 ν΄λμ€μ λΉμ μμ±ν λ DataBean1 νμ μΈ νλ data1, data2μ λ³μλͺ κ³Ό idκ° λμΌν λΉμ΄ μλμΌλ‘ μ£Όμ λλ€.
λ°λΌμ <bean>μ id μμ±κ³Ό ν΄λμ€μ λ³μλͺ μ΄ λμΌν΄μΌ νλ©°, setterλ₯Ό ν΅ν΄ μ£Όμ λλ―λ‘ setterκ° νμνλ€.
λ€μμΌλ‘ λΉμ μ΄λ¦(id)κ° μλ λΉμ νμ μ ν΅ν μλ μ£Όμ μ μμ보μ.
XML μ€μ νμΌ
<bean id='obj3' class='com.atoz_develop.beans.TestBean2' autowire="byType"/>
<bean id='data_bean2' class='com.atoz_develop.beans.DataBean2'/>
<bean>μ autowire μμ±μ "byType"μ μ€μ νλ€.
μλ° μ½λ
public class TestBean2 {
private DataBean2 data1;
private DataBean2 data2;
public DataBean2 getData1() {
return data1;
}
public void setData1(DataBean2 data1) {
this.data1 = data1;
}
public DataBean2 getData2() {
return data2;
}
public void setData2(DataBean2 data2) {
this.data2 = data2;
}
}
TestBean2 ν΄λμ€μ λΉμ μμ±ν λ DataBean2 νμ μΈ νλ data1, data2μ νμ μ΄ κ°μ λΉμ΄ μλμΌλ‘ μ£Όμ λλ€.
XML μ€μ μ primary μ€μ μμ΄ νμ μ΄ λμΌν λΉμ΄ λ κ° μ΄μ μ μλμ΄ μμΌλ©΄ μλ¬κ° λ°μνλ―λ‘ μ΄μ μ£Όμνμ.
λ§μ°¬κ°μ§λ‘ setterλ₯Ό ν΅ν΄ μ£Όμ λλ―λ‘ setterκ° νμνλ€.
μμ±μλ₯Ό ν΅ν μλ μ£Όμ μ λ€μκ³Ό κ°μ΄ μ€μ νλ€.
XML μ€μ νμΌ
<bean id='data_bean2' class='com.atoz_develop.beans.DataBean2'/>
<bean id='obj5' class='com.atoz_develop.beans.TestBean3' autowire="constructor"/>
<bean>μ autowire μμ±μ "constructor"λ₯Ό μ€μ νλ€.
μλ° μ½λ
public class TestBean3 {
private int data1;
private String data2;
private DataBean2 data3;
private DataBean2 data4;
public TestBean3(DataBean2 data3, DataBean2 data4) {
this.data3 = data3;
this.data4 = data4;
}
public int getData1() {
return data1;
}
public void setData1(int data1) {
this.data1 = data1;
}
public String getData2() {
return data2;
}
public void setData2(String data2) {
this.data2 = data2;
}
public DataBean2 getData3() {
return data3;
}
public void setData3(DataBean2 data3) {
this.data3 = data3;
}
public DataBean2 getData4() {
return data4;
}
public void setData4(DataBean2 data4) {
this.data4 = data4;
}
}
autowire μμ±μ μ΄μ©ν μλ μ£Όμ μ μ°Έμ‘° νμ λ§ κ°λ₯νλ―λ‘ κΈ°λ³Έ νμ νλλ λ€μκ³Ό κ°μ΄ μ§μ μ€μ ν΄μ£Όμ΄μΌ νλ€.
XML μ€μ νμΌ
<bean id='obj7' class='com.atoz_develop.beans.TestBean3' autowire="constructor">
<constructor-arg value='200' index='0' type='int'/>
<constructor-arg value='λ¬Έμμ΄2' index='1'/>
</bean>
μλ° μ½λ
public class TestBean3 {
private int data1;
private String data2;
private DataBean2 data3;
private DataBean2 data4;
public TestBean3(int data1, String data2, DataBean2 data3, DataBean2 data4) {
this.data1 = data1;
this.data2 = data2;
this.data3 = data3;
this.data4 = data4;
}
public int getData1() {
return data1;
}
public void setData1(int data1) {
this.data1 = data1;
}
public String getData2() {
return data2;
}
public void setData2(String data2) {
this.data2 = data2;
}
public DataBean2 getData3() {
return data3;
}
public void setData3(DataBean2 data3) {
this.data3 = data3;
}
public DataBean2 getData4() {
return data4;
}
public void setData4(DataBean2 data4) {
this.data4 = data4;
}
}
<beans> λ 벨μ default-autowire μμ±μ μ¬μ©ν΄μ <bean>μ autowire μ€μ μ΄ λμ΄μμ§ μμ κ²½μ° κΈ°λ³Έμ μΌλ‘ μ μ©ν μλ μ£Όμ λ°©λ²μ μ€μ ν μ μλ€.
<?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"
default-autowire="byName">
μ΄λ κ² <beans>μ default-autowire μμ±μ μΆκ°νκ³ μ¬μ©ν μλ μ£Όμ μ΅μ μ μ€μ νλ€.
κ·Έλ¦¬κ³ νΉμ λΉμ μλ μ£Όμ μ νμ§ μμΌλ €λ©΄ <bean>μ autowire μμ±μ "no"λ₯Ό μ€μ νλ©΄ λλ€.
<bean id='obj9' class='com.atoz_develop.beans.TestBean1' autowire="no"/>
μ΄ λΉμ default-autowireμ μν₯μ λ°μ§ μκ² λλ€.
3. DI(Dependency Injection) μ€μ
μμ±μ μ£Όμ
XML μ€μ νμΌ
<bean id="studentDao" class="ems.member.dao.StudentDao" ></bean>
<bean id="registerService" class="ems.member.service.StudentRegisterService">
<constructor-arg ref="studentDao" />
</bean>
μλ° μ½λ
public class StudentRegisterService {
private StudentDao studentDao;
public StudentRegisterService(StudentDao studentDao) {
this.studentDao = studentDao;
}
}
μμ±μκ° μ¬λ¬ κ°μΈ κ²½μ° <constructor-arg>μ type μμ±μ μ¬μ©ν΄μ μ΄λ€ μμ±μλ₯Ό μ¬μ©ν΄μ λΉ κ°μ²΄λ₯Ό λ§λ€ κ²μΈμ§ ꡬ체μ μΌλ‘ λͺ μν μ μλ€.
μ§μ νμ§ μμΌλ©΄ κΈ°λ³Έμ μΌλ‘ String νμ μ μκ·λ¨ΌνΈλ₯Ό κ°λ μμ±μλ₯Ό μ¬μ©νκ² λλ―λ‘ κ·Έ μΈμ κΈ°λ³Έ νμ μ κ°λ μμ±μ μ£Όμ μ typeμ λͺ μνλ κ²μ΄ μ’λ€.
XML μ€μ νμΌ
<bean id="obj1" class="com.atoz_develop.beans.TestBean">
<constructor-arg value="100" type="int"/>
</bean>
<bean id="obj2" class="com.atoz_develop.beans.TestBean">
<constructor-arg value="11.11" type="double"/>
</bean>
<bean id="obj3" class="com.atoz_develop.beans.TestBean">
<constructor-arg value="λ¬Έμμ΄" type="java.lang.String"/>
</bean>
μλ° μ½λ
public class TestBean {
private int data1;
private double data2;
private String data3;
public TestBean(int data1) {
this.data1 = data1;
this.data2 = 0.0;
this.data3 = null;
}
public TestBean(double data2) {
this.data1 = 0;
this.data2 = data2;
this.data3 = null;
}
public TestBean(String data3) {
this.data1 = 0;
this.data2 = 0.0;
this.data3 = data3;
}
}
μλ°μ new μ°μ°μλ‘ κ°μ²΄λ₯Ό μμ±ν λμ λ¬λ¦¬ μ€νλ§ DIμ μμ±μ μ£Όμ μ€μ μμλ μμ±μ μκ·λ¨ΌνΈμ μμλ₯Ό λ€λ₯΄κ² ν μ μλ€.
μ€νλ§μ΄ μμλ₯Ό μ μΆνκΈ° μ΄λ €μΈ λλ typeκ³Ό index μμ±μ μ¬μ©ν΄μ μμλ₯Ό ꡬ체μ μΌλ‘ λͺ μνλ€.
XML μ€μ νμΌ
<bean id="obj1" class="com.atoz_develop.beans.TestBean">
<constructor-arg value="λ°κ°μ΅λλ€" type="java.lang.String"/>
<constructor-arg value="300" type="int"/>
<constructor-arg value="33.33" type="double"/>
</bean>
<bean id="obj2" class="com.atoz_develop.beans.TestBean">
<constructor-arg value="44.44" type="double" index="1"/>
<constructor-arg value="44" type="int" index="0"/>
<constructor-arg value="μλ
νμΈμ" type="java.lang.String" index="2"/>
</bean>
μλ° μ½λ
public class TestBean {
private int data1;
private double data2;
private String data3;
public TestBean(int data1, double data2, String data3) {
this.data1 = data1;
this.data2 = data2;
this.data3 = data3;
}
}
κ°μ²΄ μ£Όμ μ <constructor-arg>μ ref μμ±μ μ¬μ©νλ κ² μΈμλ <constructor-arg> νμμ <bean>μ μ¬μ©ν΄μ λΉμ μ§μ μ μν μ μλ€.
XML μ€μ νμΌ
<bean id="obj" class="com.atoz_develop.beans.TestBean">
<constructor-arg>
<bean class="com.atoz_develop.beans.DataBean"/>
</constructor-arg>
<constructor-arg>
<bean class="com.atoz_develop.beans.DataBean"/>
</constructor-arg>
</bean>
μλ° μ½λ
public class TestBean {
private DataBean data1;
private DataBean data2;
public TestBean(DataBean data1, DataBean data2) {
this.data1 = data1;
this.data2 = data2;
}
}
νλ‘νΌν° μ£Όμ
XML μ€μ νμΌ
<bean id="dataBaseConnectionInfoDev" class="ems.member.DataBaseConnectionInfo">
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="userId" value="scott" />
<property name="userPw" value="tiger" />
</bean>
<property>μ value μμ±μ μ¬μ©ν΄μ κ°μ μ€μ νλ€.
μλ° μ½λ
public class DataBaseConnectionInfo {
private String jdbcUrl;
private String userId;
private String userPw;
public String getJdbcUrl() {
return jdbcUrl;
}
public void setJdbcUrl(String jdbcUrl) {
this.jdbcUrl = jdbcUrl;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserPw() {
return userPw;
}
public void setUserPw(String userPw) {
this.userPw = userPw;
}
}
XML μ€μ νμΌ
<bean id="informationService" class="ems.member.service.EMSInformationService">
<property name="info">
<value>Education Management System program was developed in 2015.</value>
</property>
</bean>
value κ°μ΄ κΈΈ κ²½μ° <property>μ νμμ <value> νκ·Έλ₯Ό μ¬μ©ν΄μ κ°μ μ€μ ν μλ μλ€.
μλ° μ½λ
public class EMSInformationService {
private String info;
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
}
νλ‘νΌν°λ₯Ό ν΅ν κ°μ²΄ μ£Όμ μ μμ±μ μ£Όμ κ³Ό λ§μ°¬κ°μ§λ‘ <property> νμμ λΉμ μ§μ μ μνκ±°λ ref μμ±μ μ¬μ©ν΄μ μ€μ ν μ μλ€.
XML μ€μ νμΌ
<bean id="testBean" class="com.atoz_develop.beans.TestBean">
<property name="data1">
<bean class="com.atoz_develop.beans.DataBean"/>
</property>
<property name="data2" ref="data_bean"/>
</bean>
<bean id="dataBean" class="com.atoz_develop.beans.DataBean"/>
μλ° μ½λ
public class TestBean {
private DataBean data1;
private DataBean data2;
public DataBean getData1() {
return data1;
}
public void setData1(DataBean data1) {
this.data1 = data1;
}
public DataBean getData2() {
return data2;
}
public void setData2(DataBean data2) {
this.data2 = data2;
}
}
νλ‘νΌν° μ£Όμ - List νμ
XML μ€μ νμΌ
<bean id="informationService" class="ems.member.service.EMSInformationService">
<property name="developers">
<list>
<value>Cheney.</value>
<value>Eloy.</value>
<value>Jasper.</value>
<value>Dillon.</value>
<value>Kian.</value>
</list>
</property>
</bean>
List νμ μ <property>.<list> νκ·Έλ₯Ό μ¬μ©νλ€.
μλ° μ½λ
public class EMSInformationService {
private List<String> developers;
public List<String> getDevelopers() {
return developers;
}
public void setDevelopers(List<String> developers) {
this.developers = developers;
}
}
μΆκ°λ‘ <value>μλ type μμ±μ μ¬μ©ν΄μ νμ μ μ§μ ν μ μλ€.
<property name="list2">
<list>
<value type='int'>100</value>
<value type='int'>200</value>
<value type='int'>300</value>
</list>
</property>
valueκ° λ¬Έμμ΄μ΄ μλλΌλ©΄ type μμ±μΌλ‘ νμ μ μ§μ ν΄ μ£Όλ κ²μ΄ μ’λ€.
μ λ€λ¦μ΄ ClassμΈ Listμ μ£Όμ μ λ€μκ³Ό κ°μ΄ μ€μ νλ€.
XML μ€μ νμΌ
<bean id='dataBean' class='com.atoz_develop.beans.DataBean' scope='prototype'/>
<bean id='t1' class='com.atoz_develop.beans.TestBean'>
<property name="list3">
<list>
<bean class='com.atoz_develop.beans.DataBean'/>
<bean class='com.atoz_develop.beans.DataBean'/>
<ref bean='dataBean'/>
<ref bean='dataBean'/>
</list>
</property>
</bean>
<bean> νκ·Έλ‘ λΉμ μ§μ μ€μ νλμ§, <ref>λ₯Ό μ¬μ©ν΄μ κΈ°μ‘΄μ μ€μ λ λΉμ μ°Έμ‘°νλλ‘ ν μ μλ€.
μλ° μ½λ
public class TestBean {
private List<DataBean> list3;
public List<DataBean> getList3() {
return list3;
}
public void setList3(List<DataBean> list3) {
this.list3 = list3;
}
}
νλ‘νΌν° μ£Όμ - Set νμ
XML μ€μ νμΌ
<bean id='dataBean' class='com.atoz_develop.beans.DataBean' scope='prototype'/>
<bean id='t1' class='com.atoz_develop.beans.TestBean'>
<!-- μ λ€λ¦μ΄ StringμΈ set -->
<property name="set1">
<set>
<value>λ¬Έμμ΄1</value>
<value>λ¬Έμμ΄2</value>
<value>λ¬Έμμ΄3</value>
<value>λ¬Έμμ΄3</value> <!-- Setμ νΉμ±μ μ£Όμ
λμ§ μμ -->
<value>λ¬Έμμ΄3</value> <!-- Setμ νΉμ±μ μ£Όμ
λμ§ μμ -->
</set>
</property>
<!-- μ λ€λ¦μ΄ IntegerμΈ set -->
<property name="set2">
<set>
<value type='int'>100</value>
<value type='int'>200</value>
<value type='int'>300</value>
<value type='int'>300</value> <!-- Setμ νΉμ±μ μ£Όμ
λμ§ μμ -->
<value type='int'>300</value> <!-- Setμ νΉμ±μ μ£Όμ
λμ§ μμ -->
</set>
</property>
<!-- μ λ€λ¦μ΄ DataBeanμΈ set -->
<property name="set3">
<set>
<bean class='com.atoz_develop.beans.DataBean'/>
<bean class='com.atoz_develop.beans.DataBean'/>
<ref bean="dataBean"/>
<ref bean="dataBean"/> <!-- Setμ νΉμ±μ μ£Όμ
λμ§ μμ -->
<ref bean="dataBean"/> <!-- Setμ νΉμ±μ μ£Όμ
λμ§ μμ -->
<ref bean="dataBean"/> <!-- Setμ νΉμ±μ μ£Όμ
λμ§ μμ -->
</set>
</property>
</bean>
XMLλ‘ μ£Όμ μ€μ μ ν λ Set νμ μ νΉμ±μ μ€λ³΅λ κ°μ λ£μ μ μκΈ° λλ¬Έμ <value>μ κ°μ΄ κ°κ±°λ <ref>μ bean idκ° λμΌν κ²½μ° μ£Όμ λμ§ μλλ€.
νΉν, <bean>μ scope μμ±μ΄ prototypeμΈ λΉμ <ref>λ‘ μ€μ ν΄λ μ£Όμ λμ§ μλλ€λ νΉμ§μ΄ μκΈ° λλ¬Έμ Set νμ μ μ¬λ¬ κ°μ κ°μ²΄λ₯Ό μ£Όμ ν΄μΌ ν λλ <bean> νκ·Έλ‘ μ§μ μ£Όμ νλλ‘ μ€μ ν΄μΌ νλ€.
μλ° μ½λ
public class TestBean {
private Set<String> set1;
private Set<Integer> set2;
private Set<DataBean> set3;
public Set<String> getSet1() {
return set1;
}
public void setSet1(Set<String> set1) {
this.set1 = set1;
}
public Set<Integer> getSet2() {
return set2;
}
public void setSet2(Set<Integer> set2) {
this.set2 = set2;
}
public Set<DataBean> getSet3() {
return set3;
}
public void setSet3(Set<DataBean> set3) {
this.set3 = set3;
}
}
νλ‘νΌν° μ£Όμ - Map νμ
XML μ€μ νμΌ
<bean id="informationService" class="ems.member.service.EMSInformationService">
<property name="administrators">
<map>
<entry>
<key>
<value>Cheney</value>
</key>
<value>cheney@springPjt.org</value>
</entry>
<entry>
<key>
<value>Jasper</value>
</key>
<value>jasper@springPjt.org</value>
</entry>
</map>
</property>
</bean>
Map νμ μ <property>.<map>.<entry>λ₯Ό μ¬μ©νλ€.
μλ° μ½λ
public class EMSInformationService {
private Map<String, String> administrators;
public Map<String, String> getAdministrators() {
return administrators;
}
public void setAdministrators(Map<String, String> administrators) {
this.administrators = administrators;
}
}
λ€μμ μ λ€λ¦ νμ μ΄ <String, Object> μΈ Mapμ μ£Όμ μ€μ μμ΄λ€.
XML μ€μ νμΌ
<bean id='dataBean' class='com.atoz_develop.beans.DataBean' scope='prototype'/>
<!-- map -->
<bean id='t1' class='com.atoz_develop.beans.TestBean'>
<property name="map1">
<map>
<entry key="a1" value='λ¬Έμμ΄'/>
<entry key='a2' value='100' value-type='int'/>
<entry key='a3'>
<bean class='com.atoz_develop.beans.DataBean'/>
</entry>
<entry key='a4' value-ref="dataBean"/>
<entry key='a5'>
<list>
<value>λ¬Έμμ΄1</value>
<value>λ¬Έμμ΄2</value>
<value>λ¬Έμμ΄3</value>
</list>
</entry>
</map>
</property>
</bean>
<entry>μ key, value μμ±μΌλ‘ ν μ€μ μ€μ ν μλ μλ€.
typeμ μ§μ νμ§ μμΌλ©΄ κΈ°λ³Έμ μΌλ‘ λ¬Έμμ΄λ‘ λ€μ΄κ°κΈ° λλ¬Έμ value-type μμ±μ μ¬μ©ν΄μ νμ μ μ§μ ν΄ μ£Όμ΄μΌ νλ€.
μ μ€μ μ "a1"μλ λ¬Έμμ΄μ, "a2"μλ μ μλ₯Ό, "a3", "a4"μλ DataBean νμ μ κ°μ²΄λ₯Ό μλ‘ λ€λ₯Έ λ°©λ²μΌλ‘, "a5"μλ List κ°μ²΄λ₯Ό μ£Όμ νλ μ€μ μ΄λ€.
μλ° μ½λ
public class TestBean {
private Map<String, Object> map1;
public Map<String, Object> getMap1() {
return map1;
}
public void setMap1(Map<String, Object> map1) {
this.map1 = map1;
}
}
νλ‘νΌν° μ£Όμ - Properties νμ
XML μ€μ νμΌ
<bean id='t1' class='com.atoz_develop.beans.TestBean'>
<!-- property -->
<property name="prop1">
<props>
<prop key="p1">λ¬Έμμ΄1</prop>
<prop key="p2">λ¬Έμμ΄2</prop>
<prop key="p3">λ¬Έμμ΄3</prop>
</props>
</property>
</bean>
μλ° μ½λ
public class TestBean {
private Properties prop1;
public Properties getProp1() {
return prop1;
}
public void setProp1(Properties prop1) {
this.prop1 = prop1;
}
}
4. ApplicationContext κ°μ²΄ μμ±
μ€νλ§ XML μ€μ νμΌμ΄ ν κ°μΈ κ²½μ°
// GenericXmlApplicationContext μ¬μ© - 'classpath:' prefix νμ
ApplicationContext context = new GenericXmlApplicationContext("classpath:applicationContext.xml");
// ClassPathXmlApplicationContext μ¬μ©
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
μ€νλ§ XML μ€μ νμΌμ΄ μ¬λ¬ κ°μΈ κ²½μ°
String[] appCtxs = {"classpath:appCtx1.xml", "classpath:appCtx2.xml", "classpath:appCtx3.xml"};
ApplicationContext context = new GenericXmlApplicationContext(appCtxs);
ApplicationContext context = new ClassPathXmlApplicationContext("appCtx1.xml", "appCtx2.xml", "appCtx3.xml");
μ€νλ§ XML μ€μ νμΌμ΄ μ¬λ¬ κ°μΈ κ²½μ°(import νκ·Έ μ¬μ©)
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">
<import resource="classpath:appCtx2.xml"/>
<import resource="classpath:appCtx3.xml"/>
</beans>
ApplicationContext κ°μ²΄ μμ±μ XML μ€μ νμΌμ΄ ν κ°μΈ κ²½μ°μ λμΌνλ€.
λ΄μ© λ° μμ μμ€ μΆμ²
μΈνλ° - μ€μ¬μ±μ μ€νλ§ νλ μμν¬ κ°λ°μλ₯Ό μν μ€μ΅μ ν΅ν μ λ¬Έ κ³Όμ
κ΄λ ¨ κΈ
- [Spring] μ€νλ§ XML μ€μ → μ λ Έν μ΄μ μ€μ λ³ν λ°©λ²