ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • @Bean과 @Component
    Java 2023. 11. 24. 12:20

    개요

    스프링에서 Bean을 생성할 때, @Bean어노테이션과 @Component어노테이션 두 개를 사용하는데, 둘의 차이점이 뭘까라는 생각이 들어서 정리해보고자 한다.

     

    @Component

    싱글톤 클래스 빈을 생성하는 어노테이션으로 선언적(Declarative) 어노테이션이다. 패키지 스캔안에 선언적으로 어노테이션을 작성함으로서 "해당 클래스를 정의했으니 빈으로 등록해줘" 라는 뜻이다.

     

    @Component어노테이션은 클래스에 붙여서 해당 클래스를 스프링 빈으로 등록할 때 사용된다.
    일반적으로 클래스에 직접 사용하며, 해당 클래스의 객체가 스프링 컨테이너의 빈으로 등록된다.

    @Component 어노테이션은 컴포넌트 스캔(Component Scan)과 함께 사용되어 클래스를 자동으로 스프링 빈으로 인식하게 만든다.

    @Component
    public Class ExampleComponent {
      // ...
    }

     

    @Bean

    @Bean 어노테이션은 개발자가 직접 메서드를 작성하여 빈을 정의할 때 사용된다.

    일반적으로 @Configuration이 붙은 스프링 설정 클래스 내부에서 메서드에 @Bean을 붙여서 빈을 생성한다.

    메서드 내에서 직접 객체를 생성하고 반환하는 객체는 스프링 컨테이너에 빈으로 등록이 된다.

    @Configuration
    public class AppConfig {
    
        @Bean
        public ExampleBean exampleBean() {
            return new exampleBean();
        }
    }

    위와 같이 리턴되는 객체로 빈을 생성하기 때문에 인터페이스를 사용해서 유연하게 처리가 가능하게 된다.

     

    정리

    @Bean은 메서드 단위로 빈을 정의하고, 개발자가 직접 만든 메서드에서 반환되는 객체가 스프링 빈에 등록이 된다.

    @Component는 클래스 단위로 빈을 정의하고, 스프링이 해당 클래스를 스캔해서 빈으로 등록한다.

    일반적으로 @Bean은 설정 클래스에서 사용되고, @Component는 일반적인 컴포넌트 클래스에서 사용된다.

    @Component을 쓰기  곤란한 타사 라이브러리 클래스를 빈에 등록할 때도 @Bean어노테이션을 통한 메서드를 통해 등록할 수 있다.

     


    참고자료

     

    https://velog.io/@composite/Spring-Component-Bean-%EC%95%8C%EA%B3%A0-%EC%93%B0%EA%B8%B0


    https://medium.com/sjk5766/bean%EA%B3%BC-component-%EC%B0%A8%EC%9D%B4-96a8d0533bfd

Designed by Tistory.