안녕하세요 오늘은 VO 클래스를 @bean 어노테이션을 활용해 수동으로 빈을 등록해 보도록 하겠습니다.
스프링 컨테이너가 관리하는 자바 객체로서 재사용 가능한 컴포넌트입니다. spring boot에서는 @SpringBootApplication 어노테이션에 @ComponentScan 어노테이션을 가지고 있어 패키지 내에 있는 @Component 어노테이션 및 스트레오 타입 어노테이션(@Service, @Repository, @Controller)어노테이션이 부여된 Class들을 자동으로 Scan 해줍니다
빈을 수동으로 등록해줄때 사용하는 어노테이션으로써 @Component 어노테이션 기능을 가진 @Configuration 어노테이션과 보통 함께 사용하며 클래스 단위로 사용하는 @Component 어노테이션과는 달리 메소드 단위로 사용하는 어노테이션 입니다
빈을 수동으로 등록하고자 하는 클래스 위에 @Configuration 어노테이션을 넣어주고 빈을 수동으로 등록하고자 하는 클래스를 반환값으로 하는 메소드를 만들어 줍니다. 이후 메소드 위해 @Bean 어노테이션을 넣어줍니다
@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 어노테이션을 사용한 메소드에 매개변수를 추가하고 싶다면 매개변수로 선언된 클래스 또한 빈으로 등록되어있어야 합니다
@Getter
@Setter
public class BeanTestVO{
private String var1;
private String var2;
}
@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 값을 출력해본결과
정상적으로 출력결과가 나온것을 확인 할수 있었습니다 다음번엔 더 재미있는 소재로 찾아뵙도록 하겠습니다 감사합니다.