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 |