2. Spring Framework_Spring Ioc & DI
Spring IoC & DI
5. Spring DI
10) 스프링에서 XML 설정 파일의 분리
XML 설정파일을 여러 개로 분리할 수 있으며 이 경우 ref bean 태그를 사용하여 자바 빈을
로딩하면된다. ApplicationContext를 생성할 때 여러 XML 파일명을 문자열 배열로 넣어주면 된다.
package ojc.spring.twoxml;
public interface Dog {
public void jitda();
}
[Dog.java]
3. Spring Framework_Spring Ioc & DI
package ojc.spring.twoxml;
import org.springframework.stereotype.Component;
public class Pudle implements Dog {
public void jitda() {
System.out.println("푸들푸들~");
}
}
[Pudle.java]
package ojc.spring.twoxml;
import org.springframework.stereotype.Component;
public class Jindo implements Dog{
public void jitda() {
System.out.println("진도진도~");
}
}
[Jindo.java]
4. Spring Framework_Spring Ioc & DI
package ojc.spring.twoxml;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
public class DogManager {
private Pudle pudle;
private Jindo jindo;
public void setPudle(Pudle pudle) {
this.pudle = pudle;
}
public void setJindo(Jindo jindo) {
this.jindo = jindo;
}
public void walwal() {
this.jindo.jitda();
this.pudle.jitda();
}
}
[DogManager.java]
5. Spring Framework_Spring Ioc & DI
package ojc.spring.twoxml;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class DogApp {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml", "dog.xml"});
DogManager dManager = (DogManager) context.getBean("dogManager");
dManager.walwal();
}
}
[DogApp.java]
6. Spring Framework_Spring Ioc & DI
<?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.2.xsd">
<bean id="dogManager" class="ojc.spring.twoxml.DogManager">
<property name="pudle">
<ref bean="pudle"></ref>
</property>
<propertyname="jindo">
<ref bean="jindo"></ref>
</property>
</bean>
</beans>
[src/main/resources/applicationContext.xml]
7. Spring Framework_Spring Ioc & DI
<?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.2.xsd">
<bean id="pudle" class="ojc.spring.twoxml.Pudle"/>
<bean id="jindo" class="ojc.spring.twoxml.Jindo"/>
</beans>
[src/main/resources/dog.xml]
진도진도~
푸들푸들~
[결과]
8. Spring Framework_Spring Ioc & DI
11) ApplicationContext의 분리(부모, 자식)
한 컨텍스는 다른 컨텍스트의 부모가 될 수 있다. 자식 컨텍스에 있는 빈이 부모 컨텍스트에 있는
빈 참조 가능한 데 스프링은 ApplicationContext 중첩 기능을 제공함으로서 설정을 여러 파일로 나눌 수 있게
해준다. 자식 컨텍스트에서 부모컨텍스트의 빈을 참조하는 방식은 동일하다.
단, 이름이 같은 것이 있다면 ref 태그에서 parent 속성을 사용하면 된다.
<?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.2.xsd">
<bean id="parent1" class="java.lang.String">
<constructor-arg>
<value>parent bean 1</value>
</constructor-arg>
</bean>
<bean id="parent2" class="java.lang.String">
<constructor-arg>
<value>parent bean 2</value>
</constructor-arg>
</bean>
</beans>
[parent.java]
16. Spring Framework_Spring Ioc & DI
<entry key="someBean">
<ref ben="onj"/>
</entry>
</util:map>
<util:properties id="props">
<prop key="firstName">Jong Cheol</prop>
<prop key="lastName">Lee</prop>
</util:properties>
<util:set id="set">
<value>hello.... set</value>
<ref bean="onj"/>
</util:set>
</beans>
[app-context6.xml]
17. Spring Framework_Spring Ioc & DI
package onj.collection.annotation;
import org.springframework.stereotype.Service;
@Service("onj")
public class Onj {
public String toString() {
return "my name is OnJ";
}
}
[Onj.java]
18. Spring Framework_Spring Ioc & DI
…
…
@Service("sample")
public class CollectionAnnotationExam {
@Resource(name="map")
private Map<String, Object> map ;
@Resource(name="props")
private Properties props;
@Resource(name="set")
private Set<Object> set;
…
…
…
[CollectionAnnotationExam.java]