🧐 @Bean 과 @Component 사용하는 이유?
IoC Container는 @Configuration, @Bean, @Component, @Repository, @Service, @Controller가 달린 클래스를
감지하며 빈을 가져오기 위해 빈 스캐닝을 합니다.
대표적으로 빈으로 사용 할 수 있도록 해주는 어노테이션으로
@Bean과 @Component이 있다.
(@Configuration은 구성클래스를 만들 때 사용, @Repository, @Service, @Controller는 @Component에 속해있다.)
😊@Bean vs @Component
👉 @Bean
- @Bean은 개발자가 직접 제어가 불가능한 외부 라이브러리를 사용할 때 사용한다.
- @Configuration을 선언한 클래스 내부에서 사용해준다.
- 즉, 개발자가 작성한 메소드를 통해 반환되는 객체를 Bean으로 만든다.
< 개발자가 직접 제어가 불가능한 외부 라이브러리를 사용한 경우 >
@Configuration
public class ExampleConfig {
@Bean
public ArrayList<String> array(){
return new ArrayList<String>();
}
}
< 개발자가 만들어준 클래스를 import해 사용한 경우 >
@Configuration
public class ExampleConfig {
@Bean(name="mybean")
public Product aaa(){
Battery p1 = new Battery("AAA", 2.5);
p1.setRechargeable(true);
return p1;
}
}
- name 속성을 주지 않으면 자동으로 빈의 이름(Bean id)으로 'aaa'가 생성된다(대문자 없애고 소문자로만.)
- name 속성을 주면 자동으로 빈의 이름(Bean id)으로 2번째 예시와 같이 'mybean'이 생성된다.
👉 @Component
- @Component는 개발자가 직접 작성한 Class를 Bean으로 등록 할 수 있게 만들어 준다.
- 즉 개발자가 작성한 class를 Bean으로 만든다.
@Component(value="mybean")
public class Example {
puiblic Example(){
System.out.println("Hello world");
}
}
- Bean id를 지정해줄 때는 name 속성이 아닌 value 속성을 사용해 Bean id를 지정해준다.
정리
참고 문서 :
스프링5 레시피 (마틴 데이넘, 다니엘 루비오, 조시 롱 저/이일웅 역)
반응형
'Back-end > Spring' 카테고리의 다른 글
[Spring] DAO 기본 구조 만들기 (0) | 2020.07.27 |
---|---|
[Spring] @Autowired vs @Resource vs @Inject (0) | 2020.07.14 |
[Spring] POJO 구성해보기 (0) | 2020.07.12 |
[Spring] POJO 란 무엇인가? (2) | 2020.07.12 |
[Spring] 스프링의 심장부 - IoC (제어의 역전) (1) | 2020.07.12 |