본문 바로가기
Spring/Spring 팁

[Spring] @Configuration과 @Component, 그리고 @Bean

by E145 2022. 1. 29.
반응형

Spring에서 Bean을 등록하는 방법

 

스프링에서 Bean을 등록하는 방법은 일반적으로 두 가지 존재한다.

 

1. @Component, @Controller, @Service, @Repository와 같은 어노테이션을 클래스에 선언하는 방법.

@Component
public class TestBean{
   public void print(){
       System.out.println("빈 등록 테스트");
   }
}

 

2. @Configuration을 클래스위에 선언하고, 해당 클래스 안에서 @Bean을 통해 등록하는 방법.

public class TestBean{
   public void print(){
       System.out.println("빈 등록 테스트");
   }
}

---------------------------------------------------

@Configuraion
public class ConfTest{

    @Bean
    public TestBean testBean(){
        return new TestBean();
    }
}

 

@Configuration과 @Component류의 차이점

 

"What is the difference between @Configuration and @Component in Spring?"

 

StackOverflow에 올라온 답변에 의하면

 

@Configuration은 하나 이상의 @Bean 메소드를 선언하고, 해당 빈을 Spring 컨테이너에 의해 처리될 수 있음을 나타낸다.

 

@Component는 해당 클래스가 CompoentScan의 대상임을 표시하고, Spring 컨테이너에 등록된다고 한다.

 

 

 

What is the difference between @Configuration and @Component in Spring?

@ComponentScan creates beans using both @Configuration and @Component. Both these annotations work fine when swapped. What is the difference then?

stackoverflow.com

 

 

@Configuration이란 무엇인가??

 

그렇다면, @Configuration에 대해 자세히 살펴보자.

 

@Configuration의 내부를 살펴보면 특이한 것을 발견할 수 있다.

 

@Configuration

 

@Configuration 안에는 결국 @Compenent가 선언되어 있다.

 

@Controller, @Service, @Repository

 

@Controller, @Service, @Repository 역시 같은 형태를 가지고 있다.

 

즉, @Configuration 역시 Spring 컨테이너에 등록되는 Bean 중 하나가 된다는 것이다.

 

 

@Bean이 선언된 메소드는 무엇을 리턴할까??

 

@Configuration도 결국 @Component를 통해 Spring 컨테이너에 등록된 Bean이라는 것을 확인했다.

 

그런데, 일반적으로는 @Configuration 클래스 안 메소드에 @Bean을 통해 Bean을 등록한다.

 

그렇다면 @Bean 메소드는 무엇을 리턴하는 것일까?

 

@Bean 메소드의 형태는 객체를 생성하여 리턴하는 것 처럼 보인다.

 

하지만, Spring에 등록된 Bean을 리턴한다.

 

 

@Bean 메소드의 리턴 값은 항상 Bean일까?

 

@Configuration으로 등록된 클래스의 @Bean 메소드 리턴 값은 Spring 컨테이너에 등록된 Bean이다.

 

그렇다면, 해당 클래스의 메소드는 항상 Bean을 리턴할까??

 

그렇지는 않다. Configuration으로 등록된 Bean에서 메소드를 호출할 때만 Bean을 리턴한다.

 

 

 

 

@Bean은 @Configuration에서만 등록이 가능할까??

 

Bean을 등록하는 것은 ComponentScan에 의해 @Bean이 선언된 메소드를 찾아 등록하는 것이기 때문에

@Component에서 @Bean을 이용한 Bean 등록이 가능하다.

 

다만, @Component로 Bean을 등록하는 메소드에서 리턴하는 값은 Bean이 아니다.

 

 

 

 

 

 

반응형

'Spring > Spring 팁' 카테고리의 다른 글

Kotlin과 all-open  (0) 2022.02.14
Kotlin과 Spring Bean  (0) 2022.02.06
Spring Boot - Validation  (0) 2021.09.23
[ Spring Security ] Spring Security0  (2) 2021.08.30

댓글