Spring 개발일지(7) - 의존 객체 자동 주입
Spring 개발일지는 여러 절로 구성되어 있습니다.
- Spring 개발일지(1) - 기본적인 상식
- Spring 개발일지(2) - 개발환경 구축
- Spring 개발일지(3) - 스프링 프로젝트 생성
- Spring 개발일지(4) - 자바로 스프링 개발
- Spring 개발일지(5) - 의존성 주입(DI)
- Spring 개발일지(6) - 의존 객체 주입 방법
- Spring 개발일지(7) - 의존 객체 자동 주입
- Spring 개발일지(8) - 의존 객체의 선택
설명하기에 앞서
안녕하세요. 풀스택 개발자를 위해 달려나가는 김준호 입니다.
저번 시간에는
다양한Spring DI(Dependecy Injection)
의 방법에 대해 알아보았습니다..
오늘은 의존객체를 주입할 때 xml 을 이용하지 않고 자동적으로 주입하는 방법에 대해 알아보도록 하겠습니다.
의존객체 자동 주입
스프링 설정 파일에서 의존 객체를 주입할 때 constructor-arg
와 property
태그를 통해 객체를 주입하였습니다.
하지만 스프링 컨테이너에서 자동으로 필요한 객체를 주입하게 해주는 기능입니다. 이 종류에는 크게 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
로 구별하여 의존객체를 자동적으로 주입한다.
@Resource
는Property
,method
사용 가능하며 bean 객체의id
를 구별하여 의존객체를 자동적으로 주입한다.
마무리
다음은 c에 대해 알아보겠습니다.