/ SPRING

Spring 개발일지(7) - 의존 객체 자동 주입

Spring 개발일지는 여러 절로 구성되어 있습니다.


설명하기에 앞서

안녕하세요. 풀스택 개발자를 위해 달려나가는 김준호 입니다.
저번 시간에는 다양한Spring DI(Dependecy Injection)의 방법에 대해 알아보았습니다..
오늘은 의존객체를 주입할 때 xml 을 이용하지 않고 자동적으로 주입하는 방법에 대해 알아보도록 하겠습니다.


의존객체 자동 주입

스프링 설정 파일에서 의존 객체를 주입할 때 constructor-argproperty 태그를 통해 객체를 주입하였습니다. 하지만 스프링 컨테이너에서 자동으로 필요한 객체를 주입하게 해주는 기능입니다. 이 종류에는 크게 2가지로 나뉘어집니다.

@AutoWired

@Resource

이 2개를 스프링 어노테이션이라고 표현하는데요. 기존에 했던 xml에 의존 주입 코드를 넣는 방법을 확인하시려면 여기를 눌러주세요


@AutoWired

기존에 있던 constructor-arg 코드를 주석 처리해주시고 bean 객체만을 생성하고, Autowired로 설정해보도록 합시다.

<!-- ApplicaionContext.xml 파일입니다. -->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       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
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config />

    <bean id="registerDAO" class="dao.RegisterDAO"></bean>

    <bean id="registerService" class="service.RegisterService">
        <!-- AutoWired 설정으로 주석 처리 -->
        <!-- <constructor-arg ref="registerDAO"></constructor-arg> -->
    </bean>
</beans>

기존에 있던 소스 코드입니다. constructor-arg태그를 주석처리하였습니다. 그리고 context:annotation-config 태그를 넣고 의존되는 라이브러리 주소를 넣었습니다. 위에 url은 복사하시기 바랍니다.

@AutoWired는 bean 객체의 Class를 이용하여 식별합니다. 그래서 아래 자바코드에서 registerDAO 클래스의 bean을 가져와서 자동 주입하는 원리입니다.

    /* RegisterService.java 파일입니다. */
	@Autowired
	RegisterDAO registerDAO;
	
//	/* Autowired로 주석 처리 */
//	RegisterService(RegisterDAO registerDAO) {
//		this.registerDAO = registerDAO;
//	}
//	

기존에 있던 생성자를 주석 처리 하고 Property에 @Autowired라는 태그를 삽입하였습니다.

이렇게 간단하고 편리한 자동 의존객체 주입이 완료되었습니다. 주석 처리한 RegisterService.java 생성자에다가도 Autowired를 사용할 수 있지만 코드의 양이 많아지기 때문에 사용하지 않는 편입니다.

Property 뿐 아니라 method, 생성자 에서의 사용도 가능하며, 이때 무조건 default 생성자를 구현해야 합니다.


@Resource

    /* RegisterService.java 파일입니다. */
	@Resource
	RegisterDAO registerDAO;
	
//	/* Autowired로 주석 처리 */
//	RegisterService(RegisterDAO registerDAO) {
//		this.registerDAO = registerDAO;
//	}
//	

Resource는 Autowired와 똑같습니다. 하지만 bean의 id의 일치를 보게되며, 생성자에는 사용하지 못합니다.


정리

자동객체주입은 @AutoWired@Resource 가 있다.
@AutoWired생성자, Property, method 사용 가능하며 bean 객체의 Class로 구별하여 의존객체를 자동적으로 주입한다.
@ResourceProperty, method 사용 가능하며 bean 객체의 id를 구별하여 의존객체를 자동적으로 주입한다.


마무리

다음은 c에 대해 알아보겠습니다.