빈
Ioc 컨테이너에 의해 인스턴스화되어 조립되거나 관리되는 객체
@Component, @Service, @Controller, @Repository, @Bean, @Configuration 등으로
필요한 빈을 등록한다.
@Service, @Controller, @Repository는 @Component 를 상속받는다.
어노테이션으로 등록된 클래스들은 스프링 컨테이너에 의해 스프링 빈으로 등록된다.
필요한 곳에서 @Autowired를 통해 주입받아 사용한다.
내가 만든 클래스를 스프링 빈으로 등록하는 방법
1. @Component
만든 클래스 선언부에 @Component를 붙인다.
스프링 빈 객체로 등록이 되고 객체 생성/삭제를 스프링에서 관리한다.
예를 들어 Weapon 인터페이스에 AK 47과 AK 47 GOLD 클래스를 구현한다.
그리고 @Component로 등록한다.
필요한 곳에 @Autowired 어노테이션을 사용하면 된다.
@Autowired를 사용하여 AK 47, AK 47 GOLD 인스턴스를 스프링컨테이너에게 받는다.
오토와이어링은 자동으로 스프링 빈 객체를 특정 참조 변수에 매핑한다는 뜻이다.
2. @Configuration
아니면 설정파일에 빈을 적는 방법
xml이나 자바 설정 클래스에 빈을 적는다.
설정클래스는 클래스 선언부에 @Configuration을 붙인다.
그리고 특정 타입을 리턴하는 메서드를 만들고 @Bean을 붙인다.
리턴 객체가 스프링 빈 객체
빈 이름 기본값은 메서드 이름. @Bean(name = " ") 으로 이름 설정 가능
컴포넌트는 @Component(" ") 이런 식으로 사용
위 그대로 사용하면 문제가 생긴다.
두 개의 객체 중에서 스프링 컨테이너는 뭘 골라야할 지 모른다.
그래서 구체적으로 지정해줘야 한다.
해결하는 방법은 @Primary나 @Qualifier를 사용하는 방법이 있다.
@Primary는 객체 생성 우선권을 주는 것
@Qualifier는 이름으로 지목
예를 들면 이런 것처럼
@Component나 @Bean 이름을 지정 안하면 기본값이 소문자로 시작하는 클래스 이름이니까 그걸 쓰면 됨
[스프링부트] Bean 객체를 등록하는 두 가지 방법(@Component, @Bean) (tistory.com)
'컴퓨터공학 > Spring & Hibernate' 카테고리의 다른 글
Spring> Spring Boot> Spring Data REST (0) | 2021.10.31 |
---|---|
Spring> Spring Boot> Spring Data JPA (0) | 2021.10.30 |
Spring> Spring Boot> REST CRUD API (Standard JPA) (0) | 2021.10.24 |
Spring> Spring Boot> REST CRUD API 2 (Hibernate) (0) | 2021.10.17 |
Spring> Spring Boot> REST CRUD API (Hibernate) (0) | 2021.10.17 |