Default olarak bizim uygulamamız başladığında bütün beanlar otomatik olarak Spring tarafından initialize edilip başlatılacaktır.
@Component
public class PhysicsTeacher implements Teacher {
public PhysicsTeacher() {
System.out.println("PhysicsTeacher başlatıldı");
}
@Override
public String getName() {
return "Minter Phsiycs";
}
}@Component
public class MathTeacher implements Teacher{
public MathTeacher() {
System.out.println("MathTeacher başlatıldı");
}
@Override
public String getName() {
return "Minter Math";
}
}@Component
public class EnglishTeacher implements Teacher{
public EnglishTeacher() {
System.out.println("EnglishTeacher başlatıldı");
}
@Override
public String getName() {
return "Minter English";
}
}Uygulamayı çalıştırdığımızda otomatikman nesneler oluşturulmuş olacaktır.
Eğer ki biz nesnelerin oluşturulmasını istemiyorsak sadece ama sadece dependency injection olduğunda yada açık bir şekilde o nesne istenildiğinde oluşturulmasını istiyorsak bu sefer
@Lazy componentini kullanbiliriz işte bu sürece Lazy Initilization denir.
Biz EnglishTeacher'ımızı Lazy Initilization ile başlatalım.
@Component
@Lazy
public class EnglishTeacher implements Teacher{
public EnglishTeacher() {
System.out.println("EnglishTeacher başlatıldı");
}
@Override
public String getName() {
return "Minter English";
}
}Çıktı gördüğünüz üzere:
Yok eğer ki bütün beans'ları bizim Controller'ımızda dahil hepsini lazy-initialization ile başlatmak istersek:
spring.main.lazy-initialization=true