티스토리 뷰

 Spring bean을 등록하는 방법

1. @Configuration & @Bean : 외부 라이브러리, 프레임워크 등에서 만든 class를 등록할 때 사용

- JdbcTemplate은 외부 라이브러리이기에 @Configuration과 @Bean을 이용해 Spring bean으로 등록돼었다.

(1). @Configuration
- class에 붙이는 Annotaion
- @Bean을 사용할 때 함께 사용해 주어야 한다.

(2). @Bean
- 메소드에 붙이는 Annotaion
- 메소드에서 반환되는 객체를 Spring bean으로 등록한다.

ex) UserRepository에 @Bean을 사용해보자

cf) 보통 @Configuration Annotaion은 config package 안에 넣어둔다.

 

2. @Service, @Repository 같은 Annotaion : 개발자가 직접 만든 class를 spring bean 으로 등록할 때 사용

- UserRepository, UserService class는 직접 만든 class이기에 @Service, @Repository 같은 Annotaion을 이용해야한다.

- 위의 UserRepository에 대한 @Configuration & @Bean 예시는 보여주기 위해 일부러 수정한 것이다.

 

3. @Component

1) Controller, Service, Repository가 모두 아니고
2) 개발자가 직접 작성한 class를 Spring bean으로 등록할 때 사용되기도 한다.

- 주어진 class를 '컴포넌트'로 간주한다.
- 컴포넌트로 간주되는 class들은 스프링 서버가 뜰 때 자동으로 감지되서 스프링 컨테이너에 bean으로 등록된다.

- @Component Annotation은 @RestController, @Controller, @Service, @Repository 같은 Annotation 안에 숨어있다.

- 즉, 숨어있는 @Component Annotation 덕분에 @Controller, @Service, @Repository 같은 Annotation 들이 자동으로 감지되어 Spring bean 으로 등록됐던 것이다.

@Service Annotation  /  @Repository Annotation  /  @Controller Annotation


● Spring bean을 주입 받는 방법(가져오는 방법)

1. 생성자를 이용해 주입받는 방식(가장 권장)

- 이전 글에서는 생략했는데 원래는 생성자 위에 @Autowired Annotation을 붙여야한다.

- 근데 Spring version이 업데이트 되면서 굳이 붙이지 않아도 생성자 방식 일때는 알아서 넣어준다.

@Autowired
- 해당 Annotation이 붙은 생성자에 있는 파라미터(매개변수)에 Spring bean을 집어넣으라는 의미
- 자동(Auto)으로 연결(wired)시키라는 의미

 

2. setter & @Autowired

 

3. 필드에 직접 @Autowired 사용

[생성자 사용이 가장 권장되는 이유]
1. setter 방식 : 누군가 setter 메소드를 사용하면 오작동할 수 있다.
2. 필드에 직접 사용하는 방식 : 테스트를 어렵게 만드는 요인이다.

 

4. @Qualifier

인프런 - 자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지!(최태현)

- UserController가 있고 거기에서 FruitService interface를 사용중이다.

- 이때 FruitService interface를 3가지 Service가 모두 구현중인 상태이다.

- 이중 UserController가 AppleService, BananaService, OrangeService 중 어떤 것을 주입받을지 어떻게 설정할 수 있을까?


- 이런 경우에 @Qualifier를 사용할 수 있다.

- AppleService를 주입받는다고 하면 아래와 같이 설정할 수 있다.

- 즉, @Qualifier Annotation은 여러 개의 후보군 중 하나를 특정해서 가져올 때 사용할 수 있다.

인프런 - 자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지!(최태현)


- 다른 방식으로도 @Qualifier Annotation을 사용할 수 있다.

cf) 반드시 main 이라는 단어를 사용할 필요는 없다. Controller와 Service에서 동일한 단어만 사용하면 된다.

인프런 - 자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지!(최태현)

- Spring bean을 사용하는 쪽, Spring bean을 등록하는 쪽 모두 @Qualifier를 사용할 수 있다.
- Spring bean을 사용하는 쪽에서만 쓰면 bean의 이름을 적어주어야 한다. → AppleService
- 양쪽 모두 사용하면 @Qualifier 끼리 연결된다  BananaService

● @Primary vs @Qualifier

Q. 만약 BananaService에는 @Qualifier를 사용하고 OrangeService에는 @Primary를 사용하면 둘 중에 어느 것을 가져올까?

 

A.

- 사용하는 쪽에서 직접 적어준 @Qualifier를 가져온다.

- 즉, @Primary와 @Qualifier 중 우선 순위는 @Qualifier가 더 높다는 것이다.

cf) Spring은 일반적으로 사용자가 특수하게 직접 명시한 것에 우선순위를 더 높게 둔다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함