티스토리 뷰
스프링을 이용해서 의존성을 주입하는 세 가지의 방식을 비교해보려고 한다.
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 의 순서로 주입하며, 생산성과 유지보수의 효율성을 모두 가지고 있다!
'Spring Boot' 카테고리의 다른 글
Spring Boot + JPA Paging 처리 (0) | 2018.12.27 |
---|---|
HTTP & DNS & TCP 정의 및 동작원리 (0) | 2018.12.12 |
What is Ajax (Asynchronous Javascript And Xml) & 회원가입 (0) | 2018.12.10 |
redirect vs forward (0) | 2018.11.21 |
템플릿 엔진(Template Engine) & Mustache (0) | 2018.11.21 |