spring. component vs bean 차이점
들어가기전에
- Spring Application Context : Spring이 관리하는 객체(bean이라고도 함)를 들고 있는 곳
> Inversion Of Control Principle (제어의 역전) 에 의해 Spring은 bean 객체를 모아서 필요한 곳에서 bean 객체를 사용한다.
> 즉, 객체의 생성과 사용자의 제어권을 스프링에게 넘기는 것
@Component
@Component
public class Pizza{
........
}
- Spring이 자동적으로 탐지할 수 있는 커스터마이징된 bean
> Spring이 자동적으로 @Component로 되어 있는 클래스를 스캔하여
> 객체화한 다음에 특정 의존성을 주입하여 언제든지 사용하게 해준다.
- @Controller, @Service, @Repository 모두 @Component에 포함된다.
> 각각의 특성이 있기 때문에 적재적소에 사용하는 것이 좋다
ㄴ @Controller : @RequestMapping을 같이 스캔할 수 있다.
ㄴ @Repository : 플랫폼의 예외를 받아서 통합된 예외로 던질 수 있다.
ㄴ @Service : 아직까지는 없다.
- 2.5에 소개됨
- 유스케이스 : 개발자가 직접 컨트롤이 가능한 내부 클래스에 사용
@Bean
@Configuration
class AppConfiguration{
@Bean
public User getUse(){
return new User();
}
}
- 메소드에 사용된다.
- 3에 소개됨
- 유스케이스 : 개발자가 컨트롤 불가능한 외부 라이브러리 사용 (=소스코드가 없어서 클래스로 정의 못할때)
참고 >>
- @Bean과 @Component를 언제 써야할지 헷갈릴때 https://jojoldu.tistory.com/27
- baeldung https://www.baeldung.com/spring-component-annotation
총평 >>
1/ controller, repository, service가 @component의 한 부분인 것을 배웠다.
2/ 외부 라이브러리 사용 시에는 @bean 활용하고 개발자가 직접 컨트롤 가능한 내부 클래스에는 @component 사용