WEB/SPRING

3.[spring boot]JavaConfig(@Configuratio)와 @Bean

혼자좀비 2024. 11. 3. 16:59
JavaConfig정리

JavaConfig란 DI컨테이너에 불러올 설정을 자바의 클래스에 작성하기 위한 스프링의 기능.

JavaConfig클래스는 여러파일로 나눠 작성할수 있고, 작성한여러 JavaConfig클래스를 DI컨테이너로 불러오는 방법은 크게3가지

  • AnnotationConfigApplicationContext클래스의 생성자 인수로 지정
  • @Import로 가져오기
  • 컴포넌트 스캔

1.AnnotationConfigApplicationContext클래스의 생성자 인수로 지정하여 가져오려면 각 @Configration를 선언한 후 

  ApplicationContext context = new AnnotationconfigApplicationContext(AConfig.class,BConfig.class); 으로 각 클래스를 지정한 다음 JavaConfig클래스를 DI컨테이너에서 불러온다.

 

2.@Import를 사용하여 가져오는 방법은 

@Configuration

@Import(AConfig.Class)

public class Bconfig{......로 import를 선언한 다음

ApplicationContext context = new AnnotationconfigApplicationContext( Bconfig .class);로 선언하여 가져오면 해당 Bconfig.class에 Aconfig.Class가 import 되어있어 JavaConfig클래스를 DI컨테이너에서 불러올수 있다.

 

3.컴포넌트 스캔을 사용하는 방법은 

@Configuration

@ComponentScan

public class BConfig{.....로 @ComponentScan을 선언하면 해당 패키지에 속하면 해당 패키지를 베이스 패키지로 하여 컴포넌트가 이루어진다.

(해당 패키지에 속하면서 @Configuration이 선언되어있으면 불러와 진다.)

 

@Bean 정리

@Bean메서드는 Bean을 정의하는 방법중 하나로 JavaConfig(@Configuration)클래스 안에서 @Bean을 붙인 메서드를 작성한다.

예)

@Configuration

public class testConfig{

  @Bean

  public testService testService(){.......}

}

 

이렇게 @Bean은 Di컨테이너가 자동으로 호출해주며 반환된 객체는 Bean으로 관리된다. 그리고 @Bean메서드는 하나의 JavaConfig클래스 안에서 여러개를 정의할수 있다.

@Configuration

public class testApplication {

     @Bean

      public OrderService AService() {

      }

     @Bean

     public OrderService BService() {

     }

}

※Bean정의 방법별 장.단점

Bean정의 방법 장점 단점
스테레오타입 어노테이션 대량의 Bean정의를 간결하게 할수있음 개발자가 작성한 클래스에만 Bean정의를 할수 있음
@Bean 라이브러리가 제공하는 클래스에도 Bean정의를 할수 있음 대량의 Bean정의는 힘듬

 

참고로 개발자가 Bean을 정의할때는 스테레오 타입 어노테이션을 사용하는게 좋다. 그 이유는 개발자가 개발하다보면 점점 대량으로 만들어지기 때문이다.

기존spring에서는 xml에 <bean class=""com.ext.~~~~으로 작성을 하였는데 @ Bean과의 차이점은 무엇일까? 차이점은 거의 없다.(둘다 선언해서 쓰는것이기 때문에)

그렇다면 어느쪽을 사용하는게 좋은가? @Bean은 자바프로그램으로 작성을 하므로 타입세이프(클래스이름등을 잘못쓰거나 다른 형태의 객체를 변수로 대입할때 컴파일 오류가 발생하는것)하게 작성할수있다.

 한마디로 xml로 bean태그를 작성하게 된다면오타가 나거나 문장이 길어진다는 단점이 있다. 

'WEB > SPRING' 카테고리의 다른 글

2.[spring boot]프로파일로 설정 전환하기  (0) 2024.11.02
1.[스프링]기본 정리  (0) 2024.05.11