Yay çerçevesinin otomatik kablolama özelliği, nesne bağımlılığını örtülü olarak enjekte etmenizi sağlar. Dahili olarak ayarlayıcı veya yapıcı enjeksiyonunu kullanır.
Otomatik kablolama, ilkel ve dize değerlerini enjekte etmek için kullanılamaz. Yalnızca referansla çalışır.
Otomatik Kablolamanın Avantajı
Bu gerektirir daha az kod çünkü bağımlılığı açıkça enjekte etmek için kod yazmamıza gerek yok.
Otomatik Kablolamanın Dezavantajı
Programcının kontrolü yok.
İlkel ve dize değerleri için kullanılamaz.
Otomatik Kablolama Modları
Birçok otomatik kablolama modu vardır:
özel karakter nedir
HAYIR. | Mod | Tanım |
---|---|---|
1) | HAYIR | Varsayılan otomatik kablolama modudur. Bu, varsayılan olarak otomatik kablolamanın olmadığı anlamına gelir. |
2) | isimle | ByName modu, fasulyenin adına göre nesne bağımlılığını enjekte eder. Bu durumda özellik adı ile fasulye adı aynı olmalıdır. Dahili olarak ayarlayıcı yöntemini çağırır. |
3) | türe göre | ByType modu, nesne bağımlılığını türe göre enjekte eder. Yani özellik adı ve fasulye adı farklı olabilir. Dahili olarak ayarlayıcı yöntemini çağırır. |
4) | yapıcı | Yapıcı modu, sınıfın yapıcısını çağırarak bağımlılığı enjekte eder. Çok sayıda parametreye sahip yapıcıyı çağırır. |
5) | Otomatik algılama | Bahar 3'ten beri kullanımdan kaldırılmıştır. |
Otomatik Kablolama Örneği
İlkbaharda otomatik kablolamayı kullanmak için basit kodu görelim. Autowire modlarını uygulamak için bean öğesinin autowire özelliğini kullanmanız gerekir.
İlkbaharda otomatik kablolamanın tam örneğini görelim. Bu örneği oluşturmak için 4 dosya oluşturduk.
- B.java
- A.java
- applicationContext.xml
- Test.java
Bu sınıf yalnızca bir kurucu ve yöntem içerir.
package org.sssit; public class B { B(){System.out.println('b is created');} void print(){System.out.println('hello b');} }A.java
Bu sınıf, B sınıfının referansını, yapıcısını ve yöntemini içerir.
package org.sssit; public class A { B b; A(){System.out.println('a is created');} public B getB() { return b; } public void setB(B b) { this.b = b; } void print(){System.out.println('hello a');} void display(){ print(); b.print(); } }applicationContext.xml
Test.java
Bu sınıf, bean'i applicationContext.xml dosyasından alır ve görüntüleme yöntemini çağırır.
package org.sssit; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext('applicationContext.xml'); A a=context.getBean('a',A.class); a.display(); } }
Çıktı:
b is created a is created hello a hello b
1) byName otomatik kablolama modu
ByName otomatik kablolama modunda, fasulye kimliği ve referans adı aynı olmalıdır.
Dahili olarak ayarlayıcı enjeksiyonu kullanır.
Ancak fasulyenin adını değiştirirseniz bağımlılığı etkilemez.
Fasulyenin adını b'den b1'e değiştirdiğimiz kodu görelim.
2) byType otomatik kablolama modu
ByType otomatik kablolama modunda fasulye kimliği ve referans adı farklı olabilir. Ancak aynı türde yalnızca bir tane fasulye bulunmalıdır.
Dahili olarak ayarlayıcı enjeksiyonu kullanır.
Bu durumda, B tipi bir örnek oluşturduğunuz için düzgün çalışıyor. Referans adından farklı fasulye adınızın olması önemli değil.
Ancak, aynı türde birden fazla fasulyeniz varsa, çalışmaz ve istisna atmaz.
B tipi birçok fasulyenin bulunduğu kodu görelim.
Böyle bir durumda istisna atacaktır.
3) yapıcı otomatik kablolama modu
Yapıcı otomatik kablolama modunda, yay konteyneri bağımlılığı en yüksek parametreli kurucuya enjekte eder.
hashset java
Bir sınıfta sıfır-arg, bir-arg ve iki-arg olmak üzere 3 kurucunuz varsa, iki-arg kurucu çağrılarak enjeksiyon gerçekleştirilecektir.
4) otomatik kablolama modu yok
Otomatik kablolama modunun olmaması durumunda yaylı kap, bağımlılığı otomatik kablolama yoluyla enjekte etmez.