본문 바로가기

컴퓨터공학/Spring & Hibernate

Spring 내가 만든 클래스를 빈으로 등록하여 사용하는 법


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)

 

[스프링부트] Bean 객체를 등록하는 두 가지 방법(@Component, @Bean)

빈 객체를 등록하는 방법을 설명하기에 앞서 빈(Bean)이 무엇인지 알아보겠습니다. [ 스프링에서의 빈이란? ] 우선 스프링은 경량 컨테이너로서 객체 생성, 소멸과 같은 Life Cycle을 관리하며 스프

cbw1030.tistory.com