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> class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <bean> |
- <context:property-placeholder location="/WEB-INF/*.properties" /> 추가 후
- properties에 있는 값을 불러올때는 ${키 값}를 사용하면된다.
'2019백업' 카테고리의 다른 글
스프링 프로젝트 가이드 진행 (0) | 2019.06.25 |
---|---|
7) 전자정부 프레임워크 값 주고받는 3가지 방법 (0) | 2019.06.25 |
5) Spring Test와 Junit (0) | 2019.06.25 |
4-2) DI 애플리케이션 작성 - JUnit (0) | 2019.06.25 |
namespace는 무엇이고 XML은 무엇일까? (0) | 2019.06.20 |