티스토리 뷰

스프링을 이용해서 의존성을 주입하는 세 가지의 방식을 비교해보려고 한다. 

Java에서 간단하게 구현할 수 있는 생성자, setter 메소드를 이용하는 의존성 주입을 제외한, @Autowired, @Resource, <property> 태그를 비교해보겠다!

먼저 결론부터 말하자면, @Autowired 를 개인적으로 더 선호한다!


1. @Autowired vs @Resource


 

@Autowired 

@Resource 

사용 출처

스프링 프레임워크 

표준 자바 

빈 검색 방식

By Type --> By Name 

by Name -->By Type 

By Name 

강제방법

 @Autowired

 @Qualifier("Dog")

  @Resource(name="Dog")


@AutoWired는 스프링 프레임워크에서만 사용가능하지만,  @Resource는 스프링 프레임워크와 자바에서 모두 사용 가능하다. 그 뜻은 스프링 프레임워크가 

아닌 다른 프레임워크로 교체된다고 한다면, @Resource 가 더 효과적이다. 하지만 생산성 측면에서는 @Autowired가 더 효과적인데 그 부분은 <property>와 비교했을 때 설명하겠다. 두번째 차이는 빈 검색 방식이 있다. 이 부분에서는 어떤 것이 더 효과적이라고는 설명하지는 못하겠다. 단지 동작의 차이이다.


@Autowird는 위의 Flow chart 처럼 Type을 이용해서 우선적으로 Bean을 검색해서 주입하고, 동일한 타입(예 : 상위 인터페이스를 구현한 구현객체)의 객체는

@Qualifier 어노테이션에 부여한 아이디를 확인하여 주입한다. 그렇다고 해서, 타입이 다르지만, 아이디가 동일하다고 주입한다면, 에러가 발생한다.

탐색했을 때, Type을 우선적으로 검색하는 것이지, 아이디만 일치한다고 주입하지는 않는다!


2. @Autowird vs <property>


전 회사에서 Bean 주입을 <property> 를 이용해서 주입하는 프로그램을 운영한 경험이 있다. 운영하면서 가장 큰 불편함은 xml 파일에 Bean을 주입할 때마다

많은 양의 코드를 직접 작성해야 한다는 불편함과 오타가 발생해서 프로그램이 정상적으로 동작하지 않는 불편함이 있었다. 말 그대로 생산성이 떨어졌다.

하지만 <property> 에는 두가지 장점이 있다.

첫번째는 xml 파일에 Bean에 대한 주입을 모두 정의하기 때문에 Bean에 대한 정의를 파악하기에는 매우 용이했다.

두번째는 수정과 유지보수의 장점이 있다. @Resource는 주입성에 대한 프로그램을 수정하기 위해서는 해당 파일에 들어가서 직접 수정을 해야한다.

하지만 <property>는 다른 파일을 수정하지 않고 xml 파일에 정의된 Bean의 주입만 수정하면 되기 때문에 수정과 재배포에서 강한 장점을 가지고 있다.


그리고 @Autowired도 수정과 유지보수의 장점을 가지고 있다. @Autowired는 @Config 어노테이션이 붙은 Bean 설정 파일을 생성할 수 있다.

이 파일에서 Bean을 정의한다면, Bean 주입을 수정할 때, 해당 파일을 수정하는 것이 아닌, Bean 설정 파일만을 수정함으로써 유지보수의 효율을 높일 수 있다.

또한 @Autowird는 어노테이션을 붙이는 것만으로도 Bean을 주입할 수 있기 때문에 개발의 생산성을 높일 수 있다!


결국 정리하자면, @Autowired는 Bean을 주입할 때, By Type --> By Name 의 순서로 주입하며, 생산성과 유지보수의 효율성을 모두 가지고 있다!



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함