Merhaba arkadaşlar, bu yazımda Spring de Autowiring konusunu anlatacağım.
Spring de bağımlılıkları enjekte ederken ya yapıcıları ya da setter metotları kullanıyorduk. Bu işlemleri yapmak bize gereksiz kod yazdırır ve xml dosyamızın gereğinden fazla büyümesini sağlar.
Autowiring, bağımlılıkları otomatik yönetmemizi sağlayan yapıdır. Bağımlılıkları otomatik inject eder. Autowiring 3 çeşittir:
- byName => bean isimlerine göre bağımlılıkları inject eder.
- byType => bean tipine göre bağımlılıkları inject eder.
- Constructor => Yapıcı metotlar üzerinden beanlar inject edilir.
Şimdi örnek üzerinden konuyu anlamaya çalışalım:
Address.java
1 2 3 4 5 6 7 |
public class Address { private String street; private int no; public Address() { System.out.println("Adres Yapıcısı Çalıştı"); } |
Person.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
public class Person { private String name; private int age; private Address address; public void print() { System.out.println("Name=>" + getName() + " age=>" + getAge() + " Adress Street=>" + getAddress().getStreet() + " No=>" + getAddress().getNo()); } /* //Autowired Constructor public Person(String name, int age, Address address){ this.name = name; this.age = age; this.address = address; } */ // Getters and Setters |
Test.java
1 2 3 4 5 6 7 8 9 |
public class Test { public static void main(String[] args) { ApplicationContext applicationContext=new ClassPathXmlApplicationContext("_006_application.xml"); Person person=applicationContext.getBean("person",Person.class); person.print(); ((ClassPathXmlApplicationContext)applicationContext).close(); } } |
Application.xml
1 2 3 4 5 6 7 8 |
<bean id="person" class="_006_bean_autowiring_xml.Person" autowire="byName"> <property name="name" value="Furkan"/> <property name="age" value="23"/> </bean> <bean id="address" class="_006_bean_autowiring_xml.Address"> <property name="no" value="11"/> <property name="street" value="Tuzla"/> </bean> |
Burada byName türünü kullandık. Autowire özelliğini byName olarak belirttik ve bean ismine göre inject işlemini gerçekleştirdi.
1 2 3 4 5 6 7 8 |
<bean id="person" class="_006_bean_autowiring_xml.Person" autowire="byType"> <property name="name" value="Furkan"/> <property name="age" value="23"/> </bean> <bean id="address" class="_006_bean_autowiring_xml.Address"> <property name="no" value="11"/> <property name="street" value="Tuzla"/> </bean> |
Burada byType türünü kullandık. Autowire özelliğini byType olarak belirttik ve bean tipine göre inject işlemini gerçekleştirdi. Yani örneğin Person sınıfında String olan değişkene “Furkan” değerini inject ettik.
1 2 3 4 5 6 7 8 |
<bean id="person" class="_006_bean_autowiring_xml.Person" autowire="constructor"> <constructor-arg name="name" value="Furkan"/> <constructor-arg name="age" value="23"/> </bean> <bean id="address" class="_006_bean_autowiring_xml.Address"> <property name="no" value="11"/> <property name="street" value="Tuzla"/> </bean> |
Yapıcı metot kullanarak inject işlemini gerçekleştirdik. Xml dosyasında Autowiring kullanımı bu şekilde. Bu yazımı burada bitiriyorum diğer yazılarda görüşmek üzere….