Merhabalar değerli Java dostları,
Bu yazı ile Spring frameworke tüm hızla devam ediyoruz. Gerek kategori gerekse de AnaJavatica sekmesi altında çeşitli yazılar ile konumuza devam etmiştik. Bugün ise annotation tabanlı konfigürasyon ile bean okuma işlerine gireceğiz.
Malumunuz üzere Spring ile XML ve annotation tabanlı tanımlamalar yapılabilmektedir. Her ikisinin de kendisine göre avantaj ve dezavantajları var. Bunlara başka yazımda değinmek istiyorum. Ayrıca bu iki yöntem beraber de kullanılabilmektedir. Öncelikle basit bir bean sınıfımıza bakalım.
package anajavatica.spring.bean.annotation; public class AnnotationBean { public void sayHello() { System.out.println(this); } public void prototypeInit() { System.out.println(“Prototype init…”); } public void singletonInit() { System.out.println(“Singleton init…”); } } |
İçerisinde çok basit üç metot olan yine basit bir bean sınıfımız.
Şimdi de config sınıfımız.
package anajavatica.spring.bean.annotation; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; @Configuration public class AnnotationConfig { @Bean(name = “prototypeBean”, initMethod = “prototypeInit”) @Scope(value = “prototype”) public AnnotationBean createPrototypeBean() { return new AnnotationBean(); } @Bean(name = “singletonBean”, initMethod = “singletonInit”) @Scope(value = “singleton”) public AnnotationBean createSingletonBean() { return new AnnotationBean(); } } |
Can alıcı sınıfımız AnnotationConfig sınıfı. Öncelikle sınıf üzerinde @Configuration annotation ile bunun bir config sınıfı olduğunu belirtiyoruz. XML tabanlı config karşılaştıracak olursak beans ifadesine denk gelmektedir. Böylece ilgili tüm bean tanımlamaları bu sınıfın içerisinde yer alacak.
@Bean annotation, metot bazlıdır ve bu sınıfımız içerisinde iki tane bean tanımlıyoruz. XML tabanlı tanımda bean ifadesine denk gelir. Uygulama içerisinde erişmek için name özelliğini dolduruyoruz. Name verilmezse metodun adı default olarak name gibi kullanılır. Ayrıca initMethod özelliği ile bean kullanılmadan önce çağrılması gereken metodu belirtiyoruz.
@Scope annotation ise bean bir defa mı yoksa her çağrımında yeniden mi oluşturulacak sorusuna cevap veriyor. Her iki metot new ile dönüş yapmasına rağmen Spring bizim yerimize scope değerlerine bakıp gerekli olan instance dönüşünü sağlayacaktır.
Son olarak main sınıfı.
package anajavatica.spring.bean.annotation; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class AnnotationMain { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AnnotationConfig.class); AnnotationBean prototypeBean = context.getBean(“prototypeBean”, AnnotationBean.class); prototypeBean.sayHello(); AnnotationBean prototypeBean2 = context.getBean(“prototypeBean”, AnnotationBean.class); prototypeBean2.sayHello(); AnnotationBean singletonBean = context.getBean(“singletonBean”, AnnotationBean.class); singletonBean.sayHello(); AnnotationBean singletonBean2 = context.getBean(“singletonBean”, AnnotationBean.class); singletonBean2.sayHello(); context.close(); } } |
Main sınıfında en öenmli nokta @Configuration annotation ile işaretli sınıfları register etmek. Bu örnekte AnnotationConfig sınıfı constructor parametresi olarak verilip frameworke tanıtılıyor.
Bol Java’ lı günler dileğiyle...
Yazan: Faruk BOZAN