Default olarak bizim uygulamamız başladığında bütün beanlar otomatik olarak Spring tarafından initialize edilip başlatılacaktır.


PhysicsTeacher.java

@Component
public class PhysicsTeacher implements Teacher {
    public PhysicsTeacher() {
        System.out.println("PhysicsTeacher başlatıldı");
    }
    @Override
    public String getName() {
        return "Minter Phsiycs";
    }
}

MathTeacher.java

@Component
public class MathTeacher implements Teacher{
    public MathTeacher() {
        System.out.println("MathTeacher başlatıldı");
    }
    @Override
    public String getName() {
        return "Minter Math";
    }
}


EnglishTeacher.java

@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:

application.properties

spring.main.lazy-initialization=true