@Bean과 @Component 어노테이션을 사용하는 이유와 사용하는 방법, 그리고 두 어노테이션의 차이점에 대해서 정리해보겠습니다. 혹시 아직 Spring IoC Container, Dependency Injection(의존성 주입)과 Bean의 개념에 대해서 정리가 필요하신 분들은 아래 글을 먼저 읽어보시길 바립니다.
https://limminjeong98.tistory.com/459
Spring IoC(Inversion Of Control) Container과 Bean 그리고 Dependency Injection / IoC 컨테이너와 의존성 주입
IoC(Inversion Of Control) Container란? 객체가 생성될 때, 그 객체와 관련 있는 다른 객체들의 의존성 주입을 가능하게 하는 Spring Framework에서 AOP(Aspect Oriented Programming)를 구현할 수 있는 Applicat..
limminjeong98.tistory.com
@Bean과 @Component를 사용하는 이유
특정 객체를 의존하는 다른 객체들에게 의존성을 주입하기 위해서입니다.
이를 위해서 Spring IoC 컨테이너에서 관리할 수 있도록, 즉 ApplicationContext가 관리하는 bean으로 등록하기 위해서 이런 어노테이션을 붙이는 것이고, 해당 어노테이션이 붙은 객체들을 의존하는 다른 객체들이 컨테이너가 빈으로 등록하여 관리하는 의존성을 @Autowired를 선언함으로써 주입받을 수 있습니다.
참고로 @Controller, @Repository, @Service 어노테이션도 어노테이션의 정의 내부에 @Component를 포함하고 있기 때문에 이 어노테이션이 선언된 객체들이 ApplicationContext에 등록되어 빈으로 관리될 수 있는 것입니다.
@Bean과 @Component 사용하는 방법
@Bean은 @Configuration이나 @Component 어노테이션이 붙은 클래스 내에 메서드 레벨에서 사용하고, @Component는 클래스 레벨에서 사용합니다. (@Bean을 @Configuration이나 @Component이 붙지 않은 곳에서 사용했을 때 컴파일 오류가 나는 것은 아니지만 이 경우에는 빈으로 등록되지 않기 때문에 사용하는 의미가 없습니다.)
@Bean과 @Component 차이점
@Bean은 개발자가 직접 작성하지 않은 서드파티 라이브러리의 설정과 같은 의존성을 주입받기 위해서 사용하기에 적절하고,(@Configuration이 붙은 설정 파일에 주로 선언함) @Component는 개발자가 직접 작성한 코드에 있는 의존성을 주입받기 위해서 사용하기에 적절합니다.
참고 자료
Core Technologies
In the preceding scenario, using @Autowired works well and provides the desired modularity, but determining exactly where the autowired bean definitions are declared is still somewhat ambiguous. For example, as a developer looking at ServiceConfig, how do
docs.spring.io
'Spring Framework' 카테고리의 다른 글
Spring IoC(Inversion Of Control) Container과 Bean 그리고 Dependency Injection / IoC 컨테이너와 의존성 주입 (0) | 2022.03.17 |
---|