четверг, 24 мая 2018 г.

Режимы загрузки бинов: Spring - @Lazy и JavaEE(EJB) - @Startup

Если в Spring бин аннотирован как @Lazy(true), то он будет создан только при первом обращении к нему:
@Component
@Lazy(true)
public class MyBean {
.........
}
Соответственно при @Lazy(false) бин создается сразу при старте приложения (режим по-умолчанию в Spring) - кстати для сравнения - аналогично работает аннотация @Startup для синглтонов EJB стека JavaEE. По умолчанию Spring создает все бины при старте приложения, т е работает режим @Lazy(false) - а вот в CDI и EJB из стека JavaEE все наоборот - там бины создаются лениво при первом обращении к ним. Если c помощью @Lazy аннотирован класс конфигурации Spring - то это будет работать для всех методов отмеченных аннотацией @Bean:
@Lazy(true)
@Configuration
@ComponentScan(basePackages = "my.app")
public class AppConfig {
    @Bean
    public Region getRegion(){
        return new Region();
    }
    @Bean
    public Country getCountry(){
        return new Country();
    }
}
Можно также использовать в классе конфигурации для отдельного бина:
@Configuration
@ComponentScan(basePackages = "my.app")
public class AppConfig {
    @Bean
    @Lazy(true)
    public Region getRegion(){
        return new Region();
    }

}
А также при внедрении совместно с @Autowired или @Inject:
    @Lazy(true)
    @Autowired
    private City city;

Комментариев нет:

Отправить комментарий

Взаимодействие между приложениями и Watch Service

Взаимодействие между разными приложениями Java можно сделать с помощью файловой системы, базы данных и JMS. Рассмотрим случай ФС - в Java ...