Spring @Autowired @Lazy - PullRequest
       1

Spring @Autowired @Lazy

9 голосов
/ 14 марта 2012

Я использую аннотации Spring и хочу использовать отложенную инициализацию.

Я сталкиваюсь с проблемой, что когда я хочу импортировать бин из другого класса, я вынужден использовать @Autowired, которыйпохоже, не использует ленивый init.Есть ли способ принудительно вызвать ленивое поведение инициализации?

В этом примере я не хочу, чтобы когда-либо печаталось «Загрузка родительского компонента», поскольку я загружаю только childBean, который не зависит от lazyParent.

@Configuration
public class ConfigParent {
    @Bean
    @Lazy
    public Long lazyParent(){
        System.out.println("Loading parent bean");
        return 123L;
    }

}

@Configuration
@Import(ConfigParent.class)
public class ConfigChild {
    private @Autowired Long lazyParent;
    @Bean
    public Double childBean() {
        System.out.println("loading child bean");
        return 1.0;
    }
    @Bean
    @Lazy
    public String lazyBean() {
        return lazyParent+"!";
    }
}

public class ConfigTester {
    public static void main(String[] args) {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(ConfigChild.class);
        Double childBean=ctx.getBean(Double.class);
        System.out.println(childBean);

    }

}

Ответы [ 2 ]

13 голосов
/ 14 марта 2012

Поскольку вы используете @Autowired Long lazyParent, Spring разрешит эту зависимость при запуске контекста.Тот факт, что lazyBean равен @Lazy, не имеет значения.

Попробуйте это как альтернативу, хотя я не на 100% убежден, что эта работа будет такой, как вы хотите:* PS Я надеюсь, что вы не действительно определяете Strings, Doubles и Longs как бины, и это только пример.Право ...

1 голос
/ 10 октября 2018

Попробуйте

@Lazy @Autowired Long lazyParent;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...