Giriş
Şu satırı dahil ederiz
Şu satırı dahil ederiz
import org.springframework.context.annotation.Lazy;
1. Bu anotasyonu kullanmadan önce her şeyi lazy yapmak istersek şöyle yaparız
// In application.properties filespring.main.lazy-initialization=true// In application.yml filespring:main:lazy-initialization: true
veya lazyInitialization() metodu kullanılır. Şöyle yaparız
@SpringBootApplication public class LazyApplication { public static void main(String[] args) { new SpringApplicationBuilder(LazyApplication.class) .lazyInitialization(true) .build() .run(args); } }
2. Sadece A ve B arasında lazy ilişki kurmak istersek @Lazy kullanılabilir.
- @Lazy anotasyonu A sınıfında Constructor Injection, Setter Injection ve Field Injection ile kullanılabilir. Ayrıca @Configuration ile de kullanılabilir.
- Eğer B sınıfının da yaratılmasını istemiyorsak yani her iki tarafında da sonradan yaratılmasını istiyorsak, B sınıfı da @Lazy olarak işaretlenmelidir. Yani bu anotasyon hem A da hem de B de kullanılmalıdır.
Açıklaması şöyle.
Bu kullanımla ilgili Circular Dependency yazısına bakılabilir.
Örnek ver
Field Injection İle Kullanımı
Açıklaması şöyle.
Örnek ver
Configuration İle Kullanımı
Açıklaması şöyle. B sınıfında kullanılır.
- Eğer B sınıfının da yaratılmasını istemiyorsak yani her iki tarafında da sonradan yaratılmasını istiyorsak, B sınıfı da @Lazy olarak işaretlenmelidir. Yani bu anotasyon hem A da hem de B de kullanılmalıdır.
Açıklaması şöyle.
By default, the Spring IoC container creates and initializes all singleton beans at the time of application startup. We can prevent this pre-initialization of a singleton bean by using the @Lazy annotation.Her kullanımda Spring A sınıfında kullanılmak üzere bir proxy üretir. Açıklaması şöyle.
The @Lazy annotation may be used on any class, directly or indirectly annotated with the @Component or on methods annotated with the @Bean.
Spring uses a proxy instead of the real object at the injection point. This proxy delays the initialization of the underlying object until it is first used.Constructor Injection İle Kullanımı
Bu kullanımla ilgili Circular Dependency yazısına bakılabilir.
Örnek ver
Field Injection İle Kullanımı
Açıklaması şöyle.
Şöyle yaparız.Lazy annotation may also be placed on injection points marked with Autowired or Inject: In that context, it leads to the creation of a lazy-resolution proxy for all affected dependencies, as an alternative to using ObjectFactory or Provider.
@Autowired
@Lazy
private EventPublishService eventPublishService;
Setter Injection İle KullanımıÖrnek ver
Configuration İle Kullanımı
Açıklaması şöyle. B sınıfında kullanılır.
If Lazy is present on a @Configuration class, this indicates that all @Bean methods within that @Configuration should be lazily initialized.
Örnek
Şöyle yaparız.@Lazy
@Configuration
@ComponentScan(...) // will be lazily initialized with config
public class LazyConfiguration {
@Bean
public SomeBean beanName() { // will be lazily initialized with config
return new SomeBean();
}
@Bean
public OtherBean beanName() { // will be lazily initialized with config
return new OtherBean();
}
}
ÖrnekŞöyle yaparız
@Lazy
@Bean
public PasswordEncoder encoder() {
return new BCryptPasswordEncoder();
}
Örnek
Şöyle yaparız
@SpringBootApplication
public class LazyApplication {
@Bean("eagerBean")
public void eagerBean() {
System.out.println("Eager Bean is Created !!");
}
@Lazy
@Bean("lazyBean")
public void lazyBean() {
System.out.println("Lazy Bean is Created !!");
}
}
Hiç yorum yok:
Yorum Gönder