스프링 구성
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
기타 범위:
@Configuration
@Import({ApplicationConfig.class, WebConfig.class})
public class InfraetructureConfig {
@Bean
public DataSource dataSource() {
return new DataSource();
}
}
@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
기타 범위:
Reference
이 문제에 관하여(스프링 구성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/eidher/dependency-injection-using-spring-ckk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)