Spring
[Spring] 다양한 의존 객체 주입 (constructor-arg, property)
일구름
2023. 10. 29. 14:59
Spring 의존 객체 주입
Java와 다르게 Spring은 applicationContext.xml을 이용해 객체를 생성하고 생성자 값을 넣어준다.
Java의 경우엔 다음과 같이 객체를 생성하지만
StudentAssembler assembler = new StudentAssembler()
StudentRegisterService registerService = assembler.getRegisterService()
Spring같은 경우엔 스프링 컨테이너라고 표현되는 applicationContext.xml에서 Bean 객체를 생성하고 다음과 같이 GenericXmlApplicationContext을 이용해 applicationContext.xml 파일을 읽어와 객체 생성과 초기화를 할 수 있다.
<bean id="studentDao" class="ems.member.dao.StudentDao" ></bean>
<bean id="registerService" class="ems.member.service.StudentRegisterService">
<constructor-arg ref="studentDao" ></constructor-arg>
</bean>
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationContext.xml");
StudentRegisterService registerService = ctx.getBean("registerService", StudentRegisterService.class);
Java에서는 assembler라는 클래스 내부에서 registerService에 studentDao를 참조해주고 getRegisterService 메소드로 registerService 객체를 반환하고 생성할 수 있었다.
반면에 Spring은 applicationContext.xml 파일에 studentDao의 bean 객체를 생성한 후 registerService의 bean 객체를 생성할때 constructor-arg을 이용해 생성자에 값을 넣어주고 ref 태그를 이용해 객체 studentDao를 참조하였다.
MainClass파일에서는 getBean 메소드를 이용하여 registerService 객체를 생성하였다.
다양한 의존 객체 주입
- constructor-arg : 생성자를 통해 객체 생성할 경우 생성자 값을 넣어주기 위해 사용
- ref : 생성자 파라미터가 참조 타입일 경우
- value : 생성자 파라미터가 데이터 타입일 경우
<bean id="registerService" class="ems.member.service.StudentRegisterService">
<constructor-arg ref="studentDao" ></constructor-arg>
</bean>
- property : 변수 초기화시 사용, setter의 파라미터
- name : 변수 이름
<bean id="informationService" class="ems.member.service.EMSInformationService">
<property name="ver">
<value>The version is 1.0</value>
</property>
<property name="sYear">
<value>2015</value>
</property>
</bean>
- list : 리스트 타입
- map : map 타입
- entry : key, value 한 쌍
- key : 키 값
<property name="developers">
<list>
<value>Cheney.</value>
<value>Eloy.</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>