Merhaba arkadaşlar, bu yazımda BeanPostProcessor arabirimini(interface) anlatacağım.
BeanPostProcessor arabirimi, kendi başlatım mantığımızı, bağımlılık çözüm mantığımızı vb. Sağlamak için uygulayabileceğimiz geri çağırma yöntemlerini tanımlar. Spring Container bir veya daha fazla BeanPostProcessor kullanarak bir beanin başlatılması, yapılandırılması ve başlatılması bittikten sonra bazı özel mantıkları da kullanabiliriz.
Birden fazla BeanPostProcessor arabirimini yapılandırabilir ve BeanPostProcessor’un arabirimini uyguladığı sürece order özelliğini ayarlayarak bu BeanPostProcessor arabirimlerinin çalışacağı sırayı kontrol edebilirsiniz.
BeanPostProcessor’lar, bean (veya nesne) örneklerinde çalışır, yani Spring IOC Container bean örneğini(instance) başlatır ve daha sonra BeanPostProcessor arabirimleri işlerini yapar.
Bir ApplicationContext, BeanPostProcessor arabiriminin uygulanmasıyla tanımlanan herhangi bir beani otomatik olarak algılar ve daha sonra bean oluşturulduktan sonra Container tarafından uygun şekilde çağrılması için bu beanleri postprocessorler olarak kaydeder. Şimdi örnek üzerinde inceleyelim:
Person.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class Person { private String name; private String surname; private int age; public Person(String name, String surname, int age) { this.name = name; this.surname = surname; this.age = age; } public Person() { } public void print() { System.out.println("Name =>"+name+" Surname =>"+surname+" Age =>"+age); } //Getters and Setters |
Address.java
1 2 3 4 5 6 7 8 9 10 11 12 |
public class Address { private int no; private String street; public Address(int no, String street) { this.no = no; this.street = street; } public 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("_012_application.xml"); Person person=applicationContext.getBean("person",Person.class); person.print(); ((ClassPathXmlApplicationContext)applicationContext).close(); } } |
DisplayNameBeanPostProcessor.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class DisplayNameBeanPostProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("In Before Initialization method. Bean Name is => "+beanName); return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("In After Initialization method. Bean Name is => "+beanName); return bean; } } |
Application.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<bean id="person" class="_012_bean_beanpostprocessor_xml.Person"> <constructor-arg name="name" value="Furkan"/> <constructor-arg name="surname" value="KOÇ"/> <constructor-arg name="age" value="23"/> </bean> <bean id="address" class="_012_bean_beanpostprocessor_xml.Address"> <property name="no" value="81"/> <property name="street" value="Bilinmez Cadde"/> </bean> <bean class="_012_bean_beanpostprocessor_xml.DisplayNameBeanPostProcessor"> </bean> |
Bu yazımı burada bitiriyorum diğer yazılarımda görüşmek üzere…