2019백업

6) Bean 의존관계 설정

728x90

Bean 의존관계 설정 방법

 1. XML  

   1) Setter Inject

     - Setter 메서드를 통해 의존관계가 있는 Bean을 주입하려면 <property> 태그를 사용 할 수 있다.

     <property> </property>

      - ref 속성은 Bean 이름을 이용해 주입할 Bean을 찾는다.

      - value 속성은 단순 값 또는 Bean이 아닌 객체를 주입할 때 사용한다.

     

코드예시

<bean id="hello" class="myspring.di.xml.Hello">

<property name="name" value="Spring"></property>

<property name="printer" ref="printer"></property>

 

</bean>

  2) Constructor Injection 

     - Constructor를 통해 의존관계를 주입한다.

     - Constructor 주입방식은 생성자의 파라미터를 이용하기 때문에 한 번에 여러 개의 객체를 주입 할 수있다.

 

예시코드

<bean id="ho" class="com.spring.test.Ho">

       <constructor-arg ref="printer" />

        <constructor-arg ref="consolePrinter" />

</bean>

 

<bean id="printer" class="myspring.di.xml.StringPrinter" />

<bean id="consolePrinter" class="myspring.di.xml.ConsolePrinter"></bean>

com.spring.test 패키지 밑에 Ho.class의 생성자 값을 설정해준다.

 

참고) IoC 컨테이너

https://blog.outsider.ne.kr/753

 

  3) 컬렉션(Collection) 타입의 Injection

     - Spring은 List, Set, Map, Properties와 같은 컬렉션 타입을 XML로 작성해서 프로퍼티에 주입하는 방법을 제공한다.

 

   3-1) List 타입

List와 Set 타입 : <list> 와 <value> 태그를 이용한다.

프로퍼티와 Set 타입이면 <list> 대신 <set>을 사용하면된다.

Hello.java

public class Hello {

List<String> names;

public void setNames(List<String> list) {

this.names = list;

}

}

bean.xml

<bean id=“hello” class=“myspring.di.xml.Hello”>

<property name=“names”>

<list>

<value>Spring</value>

<value>IoC</value>

<value>DI</value>

</list>

</property>

</bean>

  3-2) Map 타입 : <map>과 <entry> 태그를 이용한다.

Hello.class

public class Hello {

Map<String,Integer> ages;

public void setAges(Map<String, Integer> ages) {

this.ages = ages;

}

bean.xml

<bean id=“hello” class=“myspring.di.xml.Hello”>

<property name=“ages”>

<map>

<entry key=“kim” value=“30” />

<entry key=“Lee” value=“35” />

<entry key=“Ahn” value=“40” />

</map>

</property>

</bean>

 

  3-3) Properties 파일을 이용한 설정 방법

 

  - xml의 bean 설정 메타정보는 애플리케이션 구조가 바뀌지 않으면 자주 변경되지 않는다.

 

  - 반면에 프로퍼티 값으로 제공되는 일부 설정정보 (예 - DataSource Bean이 사용되는 DB 연결정보)는 애플리케이션이 동작하는 환경 (개발, 테스트, 스테이징, 운영)에 따라서 자주 바뀔 수 있다.

 

  - 변경되는 이유와 시점이 다르다면 분리하는 것이 객체지향 설계의 기본 원칙이다. 

    설정에도 동일한 원칙을 적용해보자

 

  - 환경에 따라 자주 변경될 수 있는 내용은 properties 파일로 분리하는 것이 깔끔하다. 

 

  - XML처럼 복잡한 구성이 필요없고 키와 값의 쌍(key=value)으로 구성하면 된다.

 

코드예시

 

database.properties

driver= com.mysql.cj.jdbc.Driver

url=jdbc:mysql://127.0.0.1:3306/book_ex?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true

user=root

password=1234

 

bean.xml

<context:property-placeholder location="/WEB-INF/*.properties" />

<beans>
  <bean id="dataSource"

        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${driver}" />
        <property name="url" value="${url}" />
        <property name="username" value="${username}" />
        <property name="password" value="${password}" />

   <bean>
</beans>

  - <context:property-placeholder location="/WEB-INF/*.properties" /> 추가 후

  - properties에 있는 값을 불러올때는 ${키 값}를 사용하면된다.

 

 

반응형