Bahar - Java Tabanlı Yapılandırma
Şimdiye kadar, Bahar fasulyelerini XML yapılandırma dosyası kullanarak nasıl yapılandırdığımızı gördünüz. XML yapılandırmasından memnunsanız, mevcut yapılandırmalardan herhangi birini kullanarak aynı sonucu elde edeceğiniz için Java tabanlı yapılandırmaya nasıl devam edeceğinizi öğrenmenize gerçekten gerek yoktur.
Java tabanlı yapılandırma seçeneği, Spring yapılandırmanızın çoğunu XML olmadan, ancak bu bölümde açıklanan Java tabanlı birkaç açıklama yardımıyla yazmanıza olanak tanır.
@Yapılandırma ve @Bean Ek Açıklamaları
Bir sınıfa ek açıklama @Configurationsınıfın, Spring IoC konteyneri tarafından fasulye tanımlarının kaynağı olarak kullanılabileceğini belirtir. @Beanek açıklama, Spring'e, @Bean ile açıklama eklenmiş bir yöntemin, Spring uygulama bağlamında bir fasulye olarak kaydedilmesi gereken bir nesneyi döndüreceğini söyler. Olası en basit @Configuration sınıfı aşağıdaki gibi olacaktır -
package com.tutorialspoint;
import org.springframework.context.annotation.*;
@Configuration
public class HelloWorldConfig {
@Bean
public HelloWorld helloWorld(){
return new HelloWorld();
}
}
Yukarıdaki kod, aşağıdaki XML yapılandırmasına eşdeğer olacaktır -
<beans>
<bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld" />
</beans>
Burada, yöntem adı @ Bean ile açıklanır ve fasulye kimliği olarak çalışır ve gerçek fasulyeyi oluşturur ve döndürür. Konfigürasyon sınıfınız birden fazla @Bean için bir bildirime sahip olabilir. Yapılandırma sınıflarınız tanımlandıktan sonra, AnnotationConfigApplicationContext'i kullanarak bunları aşağıdaki gibi yükleyebilir ve Spring konteynerine sağlayabilirsiniz -
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(HelloWorldConfig.class);
HelloWorld helloWorld = ctx.getBean(HelloWorld.class);
helloWorld.setMessage("Hello World!");
helloWorld.getMessage();
}
Çeşitli konfigürasyon sınıflarını aşağıdaki şekilde yükleyebilirsiniz -
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(AppConfig.class, OtherConfig.class);
ctx.register(AdditionalConfig.class);
ctx.refresh();
MyService myService = ctx.getBean(MyService.class);
myService.doStuff();
}
Misal
Çalışan bir Eclipse IDE'ye sahip olalım ve bir Spring uygulaması oluşturmak için aşağıdaki adımları atalım -
Adımlar | Açıklama |
---|---|
1 | SpringExample adıyla bir proje oluşturun ve altında bir com.tutorialspoint paketi oluşturun .src oluşturulan projedeki klasör. |
2 | Bahar Merhaba Dünya Örneği bölümünde açıklandığı gibi Harici JAR Ekle seçeneğini kullanarak gerekli Bahar kitaplıklarını ekleyin . |
3 | Java tabanlı notları kullandığınız için, Java kurulum dizininizden CGLIB.jar'ı ve asm.ow2.org adresinden indirebileceğiniz ASM.jar kütüphanesini de eklemeniz gerekir . |
4 | Com.tutorialspoint paketi altında HelloWorldConfig , HelloWorld ve MainApp Java sınıfları oluşturun . |
5 | Son adım, tüm Java dosyalarının ve Bean Yapılandırma dosyasının içeriğini oluşturmak ve aşağıda açıklandığı gibi uygulamayı çalıştırmaktır. |
İşte içeriği HelloWorldConfig.java dosya
package com.tutorialspoint;
import org.springframework.context.annotation.*;
@Configuration
public class HelloWorldConfig {
@Bean
public HelloWorld helloWorld(){
return new HelloWorld();
}
}
İşte içeriği HelloWorld.java dosya
package com.tutorialspoint;
public class HelloWorld {
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("Your Message : " + message);
}
}
Aşağıdakilerin içeriği MainApp.java dosya
package com.tutorialspoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.*;
public class MainApp {
public static void main(String[] args) {
ApplicationContext ctx =
new AnnotationConfigApplicationContext(HelloWorldConfig.class);
HelloWorld helloWorld = ctx.getBean(HelloWorld.class);
helloWorld.setMessage("Hello World!");
helloWorld.getMessage();
}
}
Tüm kaynak dosyaları oluşturduktan ve gerekli ek kitaplıkları ekledikten sonra uygulamayı çalıştıralım. Yapılandırma dosyası gerekli olmadığını unutmamalısınız. Uygulamanızda her şey yolundaysa, aşağıdaki mesajı yazdıracaktır -
Your Message : Hello World!
Fasulye Bağımlılıklarının Enjekte Edilmesi
@Beans'in birbirine bağımlılıkları olduğunda, bağımlılığın basit olduğunu ifade etmek, bir Bean yönteminin diğerini çağırması kadar basittir:
package com.tutorialspoint;
import org.springframework.context.annotation.*;
@Configuration
public class AppConfig {
@Bean
public Foo foo() {
return new Foo(bar());
}
@Bean
public Bar bar() {
return new Bar();
}
}
Burada foo fasulyesi, yapıcı enjeksiyonu aracılığıyla çubuğa bir referans alır. Şimdi başka bir çalışan örneğe bakalım.
Misal
Çalışan bir Eclipse IDE'ye sahip olalım ve bir Spring uygulaması oluşturmak için aşağıdaki adımları atalım -
Adımlar | Açıklama |
---|---|
1 | SpringExample adıyla bir proje oluşturun ve altında bir com.tutorialspoint paketi oluşturun .src oluşturulan projedeki klasör. |
2 | Bahar Merhaba Dünya Örneği bölümünde açıklandığı gibi Harici JAR Ekle seçeneğini kullanarak gerekli Bahar kitaplıklarını ekleyin . |
3 | Java tabanlı notları kullandığınız için, Java kurulum dizininizden CGLIB.jar'ı ve asm.ow2.org adresinden indirebileceğiniz ASM.jar kütüphanesini de eklemeniz gerekir . |
4 | Com.tutorialspoint paketi altında TextEditorConfig , TextEditor , SpellChecker ve MainApp Java sınıfları oluşturun . |
5 | Son adım, tüm Java dosyalarının ve Bean Yapılandırma dosyasının içeriğini oluşturmak ve aşağıda açıklandığı gibi uygulamayı çalıştırmaktır. |
İşte içeriği TextEditorConfig.java dosya
package com.tutorialspoint;
import org.springframework.context.annotation.*;
@Configuration
public class TextEditorConfig {
@Bean
public TextEditor textEditor(){
return new TextEditor( spellChecker() );
}
@Bean
public SpellChecker spellChecker(){
return new SpellChecker( );
}
}
İşte içeriği TextEditor.java dosya
package com.tutorialspoint;
public class TextEditor {
private SpellChecker spellChecker;
public TextEditor(SpellChecker spellChecker){
System.out.println("Inside TextEditor constructor." );
this.spellChecker = spellChecker;
}
public void spellCheck(){
spellChecker.checkSpelling();
}
}
Aşağıda başka bir bağımlı sınıf dosyasının içeriği yer almaktadır SpellChecker.java
package com.tutorialspoint;
public class SpellChecker {
public SpellChecker(){
System.out.println("Inside SpellChecker constructor." );
}
public void checkSpelling(){
System.out.println("Inside checkSpelling." );
}
}
Aşağıdakilerin içeriği MainApp.java dosya
package com.tutorialspoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.*;
public class MainApp {
public static void main(String[] args) {
ApplicationContext ctx =
new AnnotationConfigApplicationContext(TextEditorConfig.class);
TextEditor te = ctx.getBean(TextEditor.class);
te.spellCheck();
}
}
Tüm kaynak dosyaları oluşturduktan ve gerekli ek kitaplıkları ekledikten sonra uygulamayı çalıştıralım. Yapılandırma dosyası gerekli olmadığını unutmamalısınız. Uygulamanızda her şey yolundaysa, aşağıdaki mesajı yazdıracaktır -
Inside SpellChecker constructor.
Inside TextEditor constructor.
Inside checkSpelling.
@ Import Ek Açıklama
@Importek açıklama, başka bir yapılandırma sınıfından @Bean tanımlarının yüklenmesine izin verir. Aşağıdaki gibi bir ConfigA sınıfını düşünün -
@Configuration
public class ConfigA {
@Bean
public A a() {
return new A();
}
}
Yukarıdaki Bean beyanını başka bir Bean Deklarasyonunda aşağıdaki şekilde içe aktarabilirsiniz -
@Configuration
@Import(ConfigA.class)
public class ConfigB {
@Bean
public B b() {
return new B();
}
}
Şimdi, bağlamı başlatırken hem ConfigA.class hem de ConfigB.class'ı belirtmek yerine, yalnızca ConfigB'nin aşağıdaki gibi sağlanması gerekir -
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(ConfigB.class);
// now both beans A and B will be available...
A a = ctx.getBean(A.class);
B b = ctx.getBean(B.class);
}
Yaşam Döngüsü Geri Aramaları
@Bean ek açıklaması, Spring XML'in bean öğesindeki init-method ve destroy-method özniteliklerine çok benzer şekilde, keyfi başlatma ve imha geri çağırma yöntemlerini belirtmeyi destekler -
public class Foo {
public void init() {
// initialization logic
}
public void cleanup() {
// destruction logic
}
}
@Configuration
public class AppConfig {
@Bean(initMethod = "init", destroyMethod = "cleanup" )
public Foo foo() {
return new Foo();
}
}
Fasulye Kapsamını Belirleme
Varsayılan kapsam tekildir, ancak bunu @ Kapsam ek açıklamasıyla aşağıdaki gibi geçersiz kılabilirsiniz -
@Configuration
public class AppConfig {
@Bean
@Scope("prototype")
public Foo foo() {
return new Foo();
}
}