본문 바로가기
Spring/Spring-detail

빈을 등록하기 위한 방법 @Configuraion, @Bean, @Component

by YoonJong 2022. 10. 14.
728x90

Spring IOC 컨테이너가 관리하는 자바 객체를 빈(Bean) 이라고 부른다.

 

일반적인 자바 프로그램에서는 각 객체들이 프로그램의 흐름을 제어하고,객체를 직접 생성하고 조작을 했다.

Class 를 생성하고 new 를 입력해서 원하는 객체를 직접 생성 후 사용했다.

즉 , 모든 작업자가 제어하는 구조로 흘러갔다.

 

IOC(제어의역전) 가 적용될 경우, 객체의 생성을 특별한 주체에 맡긴다.

이러한 경우, 사용자는 객체를 직접 생성하지 않으며, 사용자가 제어권을 다른 주체에 넘긴다.

new 를 이용하여 생성된 객체가 아니라, Spring에서 관리되는 자바 객체를 사용한다.

Spring 에 의해 생성되고 관리되는 자바 객체를 Bean 이라고 한다.

Bean 은 싱글톤으로 관리된다


@Configuration +  @Bean

수동으로 Bean을 등록하는 방법이다. 

클래스에 @Configuration을 붙여주어야 하며, @Bean을 이용해서 등록할때는 메소드명이 bean 이름으로 등록된다

중복된 빈 이름이 존재하지 않도록 주의해야 한다.

@Configuration
@RequiredArgsConstructor
public class SecurityConfig extends WebSecurityConfigurerAdapter {
...
 	@Bean
    public PasswordEncoder passwordEncoder() {
    ..
	}
}

스프링 컨테이너는 @Configuration 이 붙어있는 클래스에서 @Bean이 붙어있는 메소드를 찾아 bean으로 등록시킨다.

@Configuraion을 필수로 붙여주어야하며, 그래야 싱글톤으로 보장받을 수 있다.

 

이러한 방법을 사용하는 상황과 특징은 아래와 같다.

  • 개발자가 직접 만든것이 아닌, 제어가 불가능한 라이브러리를 활용할 때
  • 애플리케이션 전범위에 사용될 때
  • @Configuration이 붙은 클래스에서 등록된 bean 을 전부 확인할 수 있기 때문에 유지보수하기 좋다.
  • 빈을 등록하는 횟수가 많아질수록 수동으로 등록하기에는 한계가 있다. 따라서 @Component 어노테이션을 사용한다.

@Component 어노테이션

스프링은 컴포넌트 스캔을 통해 @Component가 붙어있는 클래스들을 모두 찾아 스프링 빈으로 자동등록해준다.

직접 개발한 클래스를 빈으로 등록하고자 할때는 @Component를 활용하면 된다.

 

예시코드는 자주 사용하는 @Controller  , @Service , @Repository 등이 있다.

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service {
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Repository {

 

 

참고

https://melonicedlatte.com/2021/07/11/232800.html#1-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B9%88spring-bean%EC%9D%B4%EB%9E%80

 

스프링 빈(Spring Bean)이란? 개념 정리 - Easy is Perfect

 

melonicedlatte.com

https://mangkyu.tistory.com/75?category=761302 

 

[Spring] 빈 등록을 위한 어노테이션 @Bean, @Configuration, @Component 차이 및 비교 - (1/2)

기존의 Spring MVC에서는 xml을 활용하여 Bean을 등록하고 있었다. 하지만 프로젝트의 규모가 커짐에 따라 사용하는 요소들을 xml에 등록하는 것이 상당히 번거로워 져서 어노테이션(Annotation, @)를 활

mangkyu.tistory.com

 

728x90

댓글