개발/java

spring. component vs bean 차이점

ttoance 2023. 7. 27. 17:51


들어가기전에
- 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

@Bean vs @Component

Spring으로 개발을 하다보면 @Bean과 @Component를 언제 써야할지 헷갈릴때가 있다.둘다 목적이 명확하지 않은 Bean을 생성할때 사용하는 어노테이션인데 왜 2개로 나누어져있나 궁금했었는데, 박재성

jojoldu.tistory.com

- baeldung https://www.baeldung.com/spring-component-annotation

Spring @Component Annotation | Baeldung

Learn about the Spring @Component annotation.

www.baeldung.com



총평 >>
1/ controller, repository, service가 @component의 한 부분인 것을 배웠다.
2/ 외부 라이브러리 사용 시에는 @bean 활용하고 개발자가 직접 컨트롤 가능한 내부 클래스에는 @component 사용

반응형