스프링 구성

Spring Configuration 주석은 클래스에 @Bean 정의 메소드가 있음을 나타냅니다.
Spring @Bean Annotation은 Spring 컨텍스트에서 관리할 Bean을 반환하도록 지정하는 메서드에 적용됩니다.

@Configuration
public class ApplicationConfig {
  @Bean
  public DataSource dataSource() {
    return new DataSource();
  }
}


Spring은 @Configuration 클래스에서 정의한 만큼의 빈을 생성할 것이다. @Configuration 클래스도 빈입니다.

public class MySpringApp {
  public static void main(String[] args) {
    // Create the application from the configuration
    ApplicationContext ctx = SpringApplication.run(ApplicationConfig.class);

    // Look up the application service interface
    // Way 1: Casting
    DataSource ds1 = (DataSource) ctx.getBean("dataSource");
    // Way 2: Use typed method
    DataSource ds2 = ctx.getBean("dataSource", DataSource.class);
    // Way 3: Without been id if type is unique
    DataSource ds3 = ctx.getBean(DataSource.class);

    // Use the application
    ds1.close();
    ds2.close();
    ds3.close();
  }
}


여러 파일에서 애플리케이션 컨텍스트 만들기




@Configuration
@Import({ApplicationConfig.class, WebConfig.class})
public class InfraetructureConfig {
  @Bean
  public DataSource dataSource() {
    return new DataSource();
  }
}


중복 빈에 주의하십시오. 앞의 코드에서 ApplicationConfig.class와 WebConfig.class가 같은 bean id를 가지고 있다면 WebConfig에서 가져온 bean은 마지막 bean이기 때문이다. 이를 피하기 위해 @Order 주석을 사용할 수 있습니다.

@Configuration
@Order(1)
public class ApplicationConfig {
  @Bean
  public String example(){
    return new String("example");
  }
}


빈 범위



기본 범위는 싱글톤입니다.

DataSource ds1 = (DataSource) ctx.getBean("dataSource");
DataSource ds2 = (DataSource) ctx.getBean("dataSource");
assert ds1 == ds2; // True - Same object


프로토타입 범위: 빈이 참조될 때마다 새 인스턴스가 생성됩니다.

@Bean
@Scope("prototype")
public DataSource dataSource() {
  return new DataSource();
}

DataSource ds1 = (DataSource) ctx.getBean("dataSource");
DataSource ds2 = (DataSource) ctx.getBean("dataSource");
assert ds1 != ds2; // True - Diferent objects


기타 범위:
  • 세션
  • 요청
  • 신청
  • 글로벌
  • 웹 소켓
  • 새로 고침
  • 사용자 정의 범위
  • 좋은 웹페이지 즐겨찾기