logo

İlkbaharda Otomatik Kablolama

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.ModTanım
1)HAYIRVarsayılan otomatik kablolama modudur. Bu, varsayılan olarak otomatik kablolamanın olmadığı anlamına gelir.
2)isimleByName 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öreByType 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ılamaBahar 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.

  1. B.java
  2. A.java
  3. applicationContext.xml
  4. Test.java
B.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.