JoJun's
Jun's Devlog
JoJun's
전체 방문자
오늘
어제
  • 분류 전체보기 (51)
    • Java (16)
      • SpringBoot (12)
      • Java (4)
    • Linux (11)
      • CentOS (4)
      • 명령어(CentOS) (5)
      • Docker (2)
    • DataBase (15)
      • 튜닝 기법 (1)
      • MSSQL (7)
      • SQLD,SQLP (6)
    • 알고리즘 (4)
      • 정렬 (1)
      • 해시 (1)
      • 완전탐색 (1)
      • 탐욕법 (1)
    • 인프라 (3)
    • Web (2)
    • 개인공간 (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • @Component
  • log4j2
  • MSSQL
  • Java
  • 파일그룹
  • cors
  • docker
  • springboot
  • Dockerfile
  • 알고리즘

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
JoJun's

Jun's Devlog

[SpringBoot] StereoType, @Component과 @Bean 차이점
Java/SpringBoot

[SpringBoot] StereoType, @Component과 @Bean 차이점

2021. 12. 30. 16:41
728x90
반응형

이번 포스트에서는 @Bean과 @Component 어노테이션의 차이점을 알아볼 것이다.

@Component로 지정된 클래스들은 모두 스프링에서 Bean으로 등록된다.

@Component 어노테이션은 스프링 컨테이너에서 사용되는 StereoType인데 먼저 StereoType이란 무엇인지 살펴본다.


StereoType이란?

StereoType의 의미는 "고정관념". "정형화된 생각"이라고 한다.

스프링에서는 스프링 컨테이너가 관리 컴포넌트로 식별할 수 있게 해주는 마커 같은 의미를 지닌다.

이전 버전에서는 XML 파일에 Bean들을 모두 명시하여 관리하고 있었다. 하지만 이러한 관리는 XML 파일의 거대화를 막지 못하였다. 그래서 아래의 버전부터 어노테이션이 등장하기 시작했다.

  • Spring 2.0 : @Repository
  • Spring 2.5 : @Component, @Controller, @Service, @Configuration

 

먼저 @Component에 대해 알아보자.


@Component

스프링에서 Bean으로 식별하며 DI(dependency Injection)에 제공하는 기본 어노테이션이다.

Component 등록은 아래와 같다. @Component 어노테이션만 사용하여 등록해주는 경우
Bean객체의 이름은 '클래스 이름의 첫 문자를 소문자'로 바꾼 것이 Bean의 이름이 된다


또는, @Component 어노테이션에 매개변수로 Bean이름을 지정하여 등록할 수도 있다.

@Component
public class TempBean1{}  // Bean Name = "tempBean1"

@Component("tb")
public class TempBean2 {} // Bean Name = "tb"

@Component로 등록된 객체를 주입(Injection) 시키는 방법은 아래와 같다.

ApplicationContext ctx = new AnnotationConfigApplicationContext(BeanConfigClass.class);

TempBean1 t1 = ctx.getBean(TempBean1.class);
TempBean1 t1 = (TempBean1) ctx.getBean("tempBean1");
TempBean1 t1 = ctx.getBean("tempBean1", TempBean1.class);

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

public class TempClass {

    @Autowired        //같은 타입의 빈을 자동으로 주입시켜준다.
    private TempBean1 bean1;

    @Autowired
    @Qualifier("tb")        //@Qualifier를 사용하여 Autowired될 빈의 이름을 지정할 수 있다.
    private TempBean2 bean2;
}

그러면 스프링에는 @Bean이라는 어노테이션이 존재하는데 그럼 @Bean과 @Component의 차이점은 무엇일까?

  • @Component는 클래스를 대상으로 사용해주며 기본적으로 클래스 이름에 첫 문자가 소문자로 한 이름이 Bean의 이름이 된다.
  • @Component는 Spring에서 @ComponentScan으로 자동으로 찾을 수 있다.
  • @Bean은 @Configuration으로 선언된 클래스에 정의된 메서드에 사용된다.
  • @Bean이 사용된 메서드가 리턴하는 객체가 Bean객체가 되며 메소드 이름이 된다.

이와 같은 차이점이 있다.!!

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Java > SpringBoot' 카테고리의 다른 글

[SpringBoot] Log4j2 기본 사용법  (0) 2022.03.07
[SpringBoot] SOP, CORS 이야기  (0) 2022.02.03
[SpringBoot] Security 인증 절차 시 DB Access 여러번 일어나는 이슈.  (0) 2022.01.12
[SpringBoot] UserDetailsService UserNotFoundException 안되는 이유  (0) 2022.01.11
[SpringBoot] 종속성 순환 에러 트러블슈팅  (0) 2021.12.30
    'Java/SpringBoot' 카테고리의 다른 글
    • [SpringBoot] SOP, CORS 이야기
    • [SpringBoot] Security 인증 절차 시 DB Access 여러번 일어나는 이슈.
    • [SpringBoot] UserDetailsService UserNotFoundException 안되는 이유
    • [SpringBoot] 종속성 순환 에러 트러블슈팅
    JoJun's
    JoJun's
    JoJun's의 기술블로그

    티스토리툴바