İlk application.yml yapılandırma profili şöyledir:
Maven projesi pom.xml paket ekleme:
Aşağıdaki kodla yeni bir eşlenmiş nesne oluşturun:
Dizi tipi, özellik değerlerini almak için bir ayarlayıcıya ihtiyaç duyar; haritalar, koleksiyonlar ve dizileri zorunlu değildir
Aşağıdaki görselde gösterildiği gibi otomatik olarak @Autowired açıklamalar kullanın:
esConfig her zaman null çıktısı verir, uzun süre çözüm aradım ama başarısız oldum, aşağıda bir çözüm var.
Yeni bir kontrolcü oluşturalım, kod şöyle:
Enjeksiyon başarılı olur ve yml yapılandırma dosyasının değerleri normal olarak aşağıdaki gibi elde edilir:
EsClient'ın başarılı şekilde enjekte edilememesinin nedenleri şunlardır:
Yapıcıda bu sınıfın bir fonksiyonunu çağırın, bu sınıfın @Autowired değişkeni bu fonksiyonda kullanılır.
Bu yüzden yanlış gidebileceğini düşündüm. Çünkü @Autowired sınıfın dış referanslardan ayarlanmasını beklemek zorundadır. Bu nedenle, @Autowired enjeksiyon süresi yapıcının uygulama süresinden daha geç olmalıdır. Çözüm:
Spring Team öneriyor: "Fasulyelerinizde her zaman üretici tabanlı bağımlılık enjeksiyonu kullanın. Zorunlu bağımlılıklar için her zaman iddialar kullanın."
Çeviri:
Spring önerir: "Her zaman çekirdekinizdeki yapıcılarla bağımlılık enjeksiyonu yapın. bağımlılıkları zorlamak için her zaman iddialar kullanın" dedi.
Orijinal yazım:
Değiştirilmiş yazı:
Not: Java değişkenlerinin başlatma sırası şudur: statik değişkenler veya statik ifade blokları – > örnek değişkenler veya başlatma özet blokları – >yapı yöntemi – >@Autowired
Peki neden son tipi üye değişkene ekliyorsun?
İnternette şu açıklama var: Yay konfigürasyonunda varsayılan çekirdek kapsamı singleton'dur ve bu her zaman başlangıçtan sonra vardır. Kapsam özelliğini prototip olarak ayarlayarak çekirdek nesnesini dinamik olarak oluşturulmuş olarak ilan edin. Ancak, hizmetiniz tek bir ifadeyle, enjeksiyon sadece bir kez uygulanır.
@Autowired kendisi tek bir mod olduğundan, program başladığında sadece bir kez çalıştırılır ve final tanımlamasa bile ikinci kez başlatılmaz, bu yüzden bu final anlamsızdır.
Bu, program çalışırken üreticinin tekrar çalıştırılmasını önlemek için olabilir;
Ya da belki anlamak daha kolaydır, ayrıca final program başladığında sadece bir kez başlatılır.
|