[spring boot] VO를 @bean 어노테이션으로 수동 빈 등록하기

jihun Choi·2023년 9월 16일
1

안녕하세요 오늘은 VO 클래스를 @bean 어노테이션을 활용해 수동으로 빈을 등록해 보도록 하겠습니다.

😎 Bean이란?

스프링 컨테이너가 관리하는 자바 객체로서 재사용 가능한 컴포넌트입니다. spring boot에서는 @SpringBootApplication 어노테이션에 @ComponentScan 어노테이션을 가지고 있어 패키지 내에 있는 @Component 어노테이션 및 스트레오 타입 어노테이션(@Service, @Repository, @Controller)어노테이션이 부여된 Class들을 자동으로 Scan 해줍니다

😎 @Bean 어노테이션

빈을 수동으로 등록해줄때 사용하는 어노테이션으로써 @Component 어노테이션 기능을 가진 @Configuration 어노테이션과 보통 함께 사용하며 클래스 단위로 사용하는 @Component 어노테이션과는 달리 메소드 단위로 사용하는 어노테이션 입니다


😎 @Bean으로 VO 클래스 빈 수동 등록하기

빈을 수동으로 등록하고자 하는 클래스 위에 @Configuration 어노테이션을 넣어주고 빈을 수동으로 등록하고자 하는 클래스를 반환값으로 하는 메소드를 만들어 줍니다. 이후 메소드 위해 @Bean 어노테이션을 넣어줍니다

  • ExConfig.java
@Configuration
public class ExConfig {

    @Bean
    public BeanTestVO abc(BeanTestVO2 beanTestVO2){
        System.out.println("=======bean이 실행됩니다======");
        BeanTestVO beanTestVO = new BeanTestVO();
        beanTestVO.setVar1("BeanTest1_var1");
        beanTestVO.setVar2(beanTestVO2.getVar2());

        return beanTestVO;
    }


}

@Bean 어노테이션을 사용한 메소드에 매개변수를 추가하고 싶다면 매개변수로 선언된 클래스 또한 빈으로 등록되어있어야 합니다

  • BeanTestVO
@Getter
@Setter
public class BeanTestVO{

    private String var1;
    private String var2;

}
  • BeanTestVO2
@Setter
@Getter
@Component
public class BeanTestVO2 {

    private String var1 = "BeanTest2_var1";
    private String var2 = "BeanTest2_var2";
}
  • BeanTestVO2 클래스는 테스트를 위해 @Component 어노테이션을 넣어 spring boot에서 자동으로 빈을 등록할수 있게 설정 했습니다

  • 또한 @bean 등록 메소드에서 var1의 값을 "BeanTest1_var1"로 하드코딩하였고 BeanTestVO2의 var2값을 BeanTestVO var2값에 넣어주었습니다

컴파일 단계에서 "bean이 실행됩니다" 라는 문구가 나온것을 확인하였습니다

System.out.println(beanTestVO.getVar1());
System.out.println(beanTestVO.getVar2());

이후 로그에 beanTestVO의 var1, var2 값을 출력해본결과

정상적으로 출력결과가 나온것을 확인 할수 있었습니다 다음번엔 더 재미있는 소재로 찾아뵙도록 하겠습니다 감사합니다.

profile
성장을 위해 열심히 노력하는 개발자 입니다

0개의 댓글