01. Bean을 수동으로 등록하는 방법
Bean 수동 등록이란?
- @Component를 사용하면 @ComponentScan에 의해 자동으로 스캔되어 해당 클래스를 Bean으로 등록
- 일반적으로 @Component를 사용하여 Bean을 자동으로 등록하는 것이 좋음
- 프로젝트의 규모가 커질 수록 등록할 Bean들이 많아지기 때문에 자동등록을 사용하면 편리함
- 비즈니스 로직과 관련된 클래스들은 그 수가 많기 때문에 @Controller, @Service와 같은 애너테이션들을 사용해서 Bean으로 등록하고 관리하면 개발 생산성에 유리함
- Bean 수동 등록은 언제 사용될까?
- 기술적인 문제나 공통적인 관심사를 처리할 때 사용하는 객체들을 수동으로 등록하는 것이 좋음.
- 공통 로그처리와 같은 비즈니스 로직을 지원하기 위한 부가 적이고 공통적인 기능들을 기술 지원 Bean이라 부르고 수동등록 함.
- 비즈니스 로직 Bean 보다는 그 수가 적기 때문에 수동으로 등록하기 부담스럽지 않음.
- 또한 수동등록된 Bean에서 문제가 발생했을 때 해당 위치를 파악하기 쉽다는 장점이 있음.
Bean 수동 등록하는 방법
- Bean으로 등록하고자하는 객체를 반환하는 메서드를 선언하고 @Bean을 설정
- Bean을 등록하는 메서드가 속한 해당 클래스에 @Configuration을 설정
- Spring 서버가 뜰 때 Spring IoC 컨테이너에 'Bean'으로 저장됨
- 'Bean' 이름: @Bean 이 설정된 메서드명
- public PasswordEncoder passwordEncoder() {..} → passwordEncoder
02. 같은 타입의 Bean이 2개라면?
food > Food
food > Chicken
food > Pizza
이 때 Food food; 필드에 @Autowired 를 사용해 Bean 객체 주입을 시도하면 오류가 발생.
같은 타입의 Bean 객체가 하나 이상이기 때문에 어떤 Bean을 등록해줘야할지 몰라 오류가 발생한 것
해결방법
1. 등록된 Bean 이름 명시하기
2. @Primary 사용하기
3. @Qualifier 사용하기
- 같은 타입의 Bean들에 Qualifier와 Primary가 동시에 적용되어있다면 Qualifier의 우선순위가 더 높음
- 하지만 Qualifier는 적용하기 위해서 주입 받고자하는 곳에 해당 Qualifier를 반드시 추가해야함
- 따라서 같은 타입의 Bean이 여러 개 있을 때는 범용적으로 사용되는 Bean 객체에는 Primary를 설정하고 지엽적으로 사용되는 Bean 객체에는 Qualifier를 사용하는 것이 좋음
'컴퓨터 프로그래밍 > Spring' 카테고리의 다른 글
[Spring] JWT 란? (0) | 2024.08.24 |
---|---|
[Spring] 인증과 인가, 쿠키와 세션 (0) | 2024.08.24 |
[Spring] JPA Auditing, Timestamped, Query Methods (0) | 2024.08.21 |
[Spring] Entity 의 상태 (0) | 2024.08.21 |
[Spring] 영속성 컨텍스트의 기능 (0) | 2024.08.21 |