-
[JAVA/SPRING] 스프링 설정 파일 분리개발/Java 2019. 2. 26. 01:19
8강 스프링 설정 파일 분리 스프링에서는 스프링 설정파일을 이용해서 bean객체를 메모리 로딩을 하고 getBean을 이용해서 자바에서 쓰고 있기 때문에, 많은 코드가 하나의 xml파일에 담겨질 수 있음
하나의 xml 파일에, 너무 많은 내용이 담기다 보면, 가독성,효율의 문제 발생
스프링 설정 파일 분리
기존에는 applicationContext.xml 하나만 존재
너무 길어질 수 있음
// appCtx1.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">
<bean id="studentDao" class="ems.member.dao.StudentDao" ></bean>
<bean id="registerService" class="ems.member.service.StudentRegisterService">
<constructor-arg ref="studentDao" ></constructor-arg>
</bean>
<bean id="modifyService" class="ems.member.service.StudentModifyService">
<constructor-arg ref="studentDao" ></constructor-arg>
</bean>
<bean id="deleteService" class="ems.member.service.StudentDeleteService">
<constructor-arg ref="studentDao" ></constructor-arg>
</bean>
<bean id="selectService" class="ems.member.service.StudentSelectService">
<constructor-arg ref="studentDao" ></constructor-arg>
</bean>
<bean id="allSelectService" class="ems.member.service.StudentAllSelectService">
<constructor-arg ref="studentDao" ></constructor-arg>
</bean>
</beans>// appCtx2.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">
<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>
<bean id="dataBaseConnectionInfoReal" class="ems.member.DataBaseConnectionInfo">
<property name="jdbcUrl" value="jdbc:oracle:thin:@192.168.0.1:1521:xe" />
<property name="userId" value="masterid" />
<property name="userPw" value="masterpw" />
</bean>
</beans>// appCtx3.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">
<bean id="informationService" class="ems.member.service.EMSInformationService">
<property name="info">
<value>Education Management System program was developed in 2015.</value>
</property>
<property name="copyRight">
<value>COPYRIGHT(C) 2015 EMS CO., LTD. ALL RIGHT RESERVED. CONTACT MASTER FOR MORE INFORMATION.</value>
</property>
<property name="ver">
<value>The version is 1.0</value>
</property>
<property name="sYear">
<value>2015</value>
</property>
<property name="sMonth">
<value>1</value>
</property>
<property name="sDay">
<value>1</value>
</property>
<property name="eYear" value="2015" />
<property name="eMonth" value="2" />
<property name="eDay" value="28" />
<property name="developers">
<list>
<value>Cheney.</value>
<value>Eloy.</value>
<value>Jasper.</value>
<value>Dillon.</value>
<value>Kian.</value>
</list>
</property>
<property name="administrators">
<map>
<entry>
<key>
<value>Cheney</value>
</key>
<value>cheney .org</value>
</entry>
<entry>
<key>
<value>Jasper</value>
</key>
<value>jasper .org</value>
</entry>
</map>
</property>
<property name="dbInfos">
<map>
<entry>
<key>
<value>dev</value>
</key>
<ref bean="dataBaseConnectionInfoDev"/>
</entry>
<entry>
<key>
<value>real</value>
</key>
<ref bean="dataBaseConnectionInfoReal"/>
</entry>
</map>
</property>
</bean>
</beans>위와 같이, 기능별로 스프링 설정 파일을 분리 가능.
분리한 스프링 설정 파일들은, 문자열 배열에 담아서 넣어주면 하나의 스프링 컨테이너를 만들 수 있다.
String[] appCtxs = {"classpath:appCtx1.xml", "classpath:appCtx2.xml", "classpath:appCtx3.xml"};
GenericXmlApplicationContext ctx =
new GenericXmlApplicationContext(appCtxs);스프링 설정 파일을 분리하는 다른 방법은, import태그를 이용하는 방법이 있다.
// appCtxImport.xml
...
<import resource="classpath:appCtx2.xml"/>
<import resource="classpath:appCtx3.xml"/>
<bean id="studentDao" class="ems.member.dao.StudentDao" ></bean>
// studentDao appCtx2.xml과 appCtx3.xml 설정 파일을 불러온다.
GenericXmlApplicationContext ctx =
new GenericXmlApplicationContext("classpath:appCtxImport.xml");
// appCtxImport만 불러오지만, appCtxImport.xml내에 appCtx2.xml과 appCtx3.xml을 import했으므로, 3파일 모두 불러올 수 있다.빈(Bean)의 범위
설명 싱글톤 생성된 빈 객체는, 한 개만 생성이 되고, getBean() 메소드로 호출될 때 동일한 객체가 반환된다. 프로토타입 스프링 설정 파일에서 빈 객체를 정의할 때 scope속성을 명시하면, 싱글톤과 반대로 매번 새로운 객체를 만든다. 싱글톤
<bean id="dependencyBean" class="scope.ex.DependencyBean">
<constructor-arg ref="injectionBean" />
<property name="injectionBean" ref="injectionBean" /></bean>프로토타입
<bean id="dependencyBean" class="scope.ex.DependencyBean" scope="prototype">
<constructor-arg ref="injectionBean" />
<property name="injectionBean" ref="injectionBean" /></bean>'개발 > Java' 카테고리의 다른 글
[JAVA/SPRING] 의존객체 선택 (0) 2019.02.28 [JAVA/SPRING] 의존객체 자동 주입 (0) 2019.02.27 [JAVA/SPRING] 다양한 의존 객체 주입 (0) 2019.01.28 [JAVA/SPRING] DI(Dependency Injeciton, 의존주입) (0) 2019.01.27 [JAVA/SPRING] 스프링 개요 (0) 2019.01.25