ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA/SPRING] 스프링 설정 파일 분리
    개발/Java 2019. 2. 26. 01:19
    8강 스프링 설정 파일 분리

    8강 스프링 설정 파일 분리

    • 스프링에서는 스프링 설정파일을 이용해서 bean객체를 메모리 로딩을 하고 getBean을 이용해서 자바에서 쓰고 있기 때문에, 많은 코드가 하나의 xml파일에 담겨질 수 있음

    • 하나의 xml 파일에, 너무 많은 내용이 담기다 보면, 가독성,효율의 문제 발생

    스프링 설정 파일 분리

    • 기존에는 applicationContext.xml 하나만 존재

      • 너무 길어질 수 있음

    • 위 파일을, appCtx1.xml, appCtx2.xml, appCtx3.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@springPjt.org</value>
    </entry>
    <entry>
    <key>
    <value>Jasper</value>
    </key>
    <value>jasper@springPjt.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>


    댓글

Designed by Tistory.