개발/java

@bean vs @component

ttoance 2022. 10. 27. 23:04

들어가기전에

@Component
public class Pizza{

   ........


}

- Spring ApplicationContext : Spring이 관리하는 객체(bean이라고도함)을 들고 있는 곳

- Inversion of Control Principle(제어의 역전)에 의해 Spring은 bean객체를 모아서 필요한 곳에서 bean 객체를 사용한다. 즉 객체의 생성과 사용자의 제어권을 스프링에게 넘기는 것.

 

@Bean

@Configuration
class AppConfiguration{

   @Bean
   public User getUse(){
      return new User();
   }
}

메소드에 사용됨

  > spring이 이 메소드의 결과를 Spring bean으로 저장한다.

- spring 3.0에 소개됨

 

@Component

- Spring이 자동적으로 탐지할 수 있는 커스터마이징된 bean

  > Spring이 자동적으로 @Component로 되어 있는 클래스를 스캔하여

  > 객체화한다음에 특정 의존성을 주입하여 언제든지 사용하게 해준다.

- @Controller, @Service, @Repository 모두 @Component에 포함된다

  > 그럼 세가지를 쓰고 @Componenet를 안 써도 괜찮을까? 아니다. 각각 특성이 있다.

    @Controller : @RequestMapping을 같이 스캔할 수 있다.

    @Repository : 플랫폼 고유의 예외를 받아서 통합된 예외를 던질 수 있다.

    @Service : 아직까지는 없다.

- spring 2.5에 소개됨

 

@Bean vs @Component

  Bean Component
자동 탐지 특정 빈을 생성하게끔 할 수 있다. 스프링이 자동으로 탐지한다.
스프링 컨테이너 스프링 컨테이너 밖에 있어도 생성 가능 스프링 컨테이너 밖에 있음 생성 못함
클래스/메소드 레벨 메소드에 사용 클래스에 사용
@Configuration @Configuration으로 생성된 클래스 내부에서만 사용
[참고] 찾아보니 @Configuration 없어도 사용은
가능한데,그럴 경우매번 객체를 생성하게 되므로
권장하지 않음.
@Configuration으로 생성된 클래스 아니더라도 사용 가능함
유스케이스 - 개발자가 컨트롤이 불가능한외부 라이브러리 사용
(= 소스코드가 없어서 클래스로 정의 못할때)
- 개발자가 직접 컨트롤이 가능한내부 클래스에 사용

 

 

참고링크 

- @Configuration 안에 @Bean을 사용해야 하는 이유 https://mangkyu.tistory.com/234

- Difference between @Bean and @Component annotation in Spring. https://www.tutorialspoint.com/difference-between-bean-and-component-annotation-in-spring

- Spring @Component Annotation https://www.baeldung.com/spring-component-annotation

- What's the difference between @Component, @Repository & @Service annotations in Spring? https://stackoverflow.com/questions/6827752/whats-the-difference-between-component-repository-service-annotations-in

반응형