Рубрики
Без рубрики

Конфигурация пружины

Аннотация конфигурации Spring указывает, что класс имеет методы определения @Been. Весна @Боб… Помечено как spring, java, внедрение зависимостей, компонент.

Аннотация конфигурации Spring указывает, что класс имеет методы определения @Been. Аннотация Spring @Bean применяется к методу, чтобы указать, что он возвращает компонент, которым будет управлять контекст Spring.

@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 есть тот же боб, что и у меня. d вы получаете компонент из веб-конфигурации, потому что это последний компонент. Чтобы избежать этого, вы можете использовать аннотацию @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

Другие области применения:

  • сессия
  • запрос
  • приложение
  • глобальный
  • нить
  • веб-кошелек
  • освежить
  • Пользовательские области видимости

Оригинал: “https://dev.to/eidher/dependency-injection-using-spring-ckk”