Używam adnotacji Spring i chcę użyć leniwego inicjowania.Wiosna @Aktowiowana @Lazy
Występuje problem, że gdy chcę zaimportować komponent bean z innej klasy, jestem zmuszony użyć @Autowired
, która nie wydaje się używać leniwego init. Czy mimo to można wymusić to leniwy proces inicjowania?
W tym przykładzie nie chcę, aby "Ładowanie nadrzędnej fasoli" było kiedykolwiek drukowane, ponieważ ładuję tylko childBean
, która nie ma zależności od 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);
}
}
Po prostu miałem okropną wizję fasoli "Pustki". Jeden dla TDWTF Myślę, że ... –
Void Bean, aby rządzić nimi wszystkimi. Fasola pustki, aby je znaleźć. Void Bean, aby je wszystkie, i iniekcji Dependency Bind im –
@skaffman Czy mogę zapytać, dlaczego nie powinienem zdefiniować Strings jako fasoli? – wings