일일구름 IT

[Spring] 다양한 의존 객체 주입 (constructor-arg, property) 본문

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>