I'm using Spring annotations and I want to use lazy initialization.
I'm running into a problem that when I want to import a bean from another class I am forced to use @Autowired
which does not seem to use lazy init. Is there anyway to force this lazy init behaviour?
In this example I do not want to see "Loading parent bean" ever being printed as I am only loading childBean
which has no dependencies on 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);
}
}
@Lazy annotation indicates whether a bean is to be lazily initialized. It can be used on @Component and @Bean definitions. A @Lazy bean is not initialized until referenced by another bean or explicitly retrieved from BeanFactory . Beans that are not annotated with @Lazy are initialized eagerly.
Lazy Initialize @Autowired Dependency The Person bean will be created eagerly. But the autowired Address bean is annotated with the @Lazy annotation, which tells the spring container to initialize the bean only when it's first requested.
The concept of delaying the loading of an object until one needs it is known as lazy loading. In other words, it is the process of delaying the process of instantiating the class until required.
To enable lazy loading for specific beans, use lazy-init=”true” attribute on bean definitions in bean configuration xml files.
Try
@Lazy @Autowired Long lazyParent;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With