• Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim
KodEdu
  • Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim

Spring Framework XML ile Konfigürasyon

  • Posted by Kodedu
  • Categories backend, Genel, Uncategorized, Yazılar, Yazılım
  • Date 30 Eylül 2013

Yazılım teknolojilerinde konfigürasyon işlemlerinde büyük çoğunlukla XML teknolojilerinden faydalanılmaktadır. Bunu Java programlama dili için düşünürsek, Apache Maven aracı için pom.xml, Web uygulamaları için web.xml, JavaServer Faces için faces-config.xml gibi yapılandırıcı dosyalar konfigürasyon maksatlı kullanılmaktadır .

Spring Framework’ de XML ve Java tabanlı yapılandırıcılarla kendi ekosistemini geliştiricilere açmaktadır. XML tabanlı Spring yapılandırıcılar genel olarak aşağıdaki işlemlere imkan sunmaktadır.

  • IOC konteyner’in yöneteceği nesnelerin (Spring Bean) tanımlanması,
  • Spring nesneleri arasındaki bağın kurulması (Setter veya Constructor Injection ile),
  • Tanımlı nesnelere dönük veri alanlarının düzenlenmesi,
    • Örneğin bir Datasource nesnesinin url, username, password gibi alanlarının düzenlenmesi.
  • Yetkilendirme yapılması,
    • Şu paket içindeki tüm sınıflarda Spring notasyonları taransın
    • Transaction yönetimi aktifleştirilsin
    • Notasyon kullanımı aktifleştirilsin
    • AspectJ proxy kullanımı aktifleştirilsin, gibi.

Spring Framework’ün 3.0 versiyonu ile beraber, XML tabanlı yapılandırmaya alternatif olarak Java sınıfları üzerinden yapılandırma desteği de getirildi. An itibariyle XML tabanlı yapılandırıcılarda yapılabilen herşey, aynı zamanda Java taraflı konfigürasyon sınıflarında da yapılabilmektedir. Hangisi daha iyi, hangisi kullanılmalı gibi konuları sizlere bırakıyor ve kullanım örneklerini paylaşmak istiyorum.

Paylaşacağımız uygulamada Arac arayüzü türünden bir Araba sınıfı ve Arac arayüzü türünden nesneleri yöneten Galeri sınıfı bulunmaktadır.

spring-uml-1
Araçların en önemli ortak kaabiliyeti çalışmalarıdır.


public interface Arac {
    public void calis();
}

Arac olduğunu iddaa eden her sınıf, çalışmalıdır.


public class Araba implements Arac {
    @Override
    public void calis() {
        System.out.println("Araba çalışıyor..");
    }
}

Araçlar yönetilirken galerilerden faydalanılabilir.


public class Galeri {
    private Arac arac;

    public Arac getArac() {
        return arac;
    }

    public void setArac(Arac arac) {
        this.arac = arac;
    }
}

UML diagramına bakıldığında, Spring nesnesi olma adayı olarak 2 sınıf gösterilebilir. Araba ve Galeri. Şimdi bu nesneleri XML ve Java taraflı konfigürasyonlarla yönetebiliriz.

Yöntem 1

Spring konteynerin yöneteceği nesneler XML elemanları olarak yapılandırılır. Nesneler arası bağ, Setter veya Constructor enjeksiyonu ile kurulur. Setter Injection “property” elemanı ile sağlanırken, Constructor Injection ise “constructor-arg” elemanı ile sağlanmaktadır.


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="araba" class="com.kodcu.xml.Araba"/>

    <bean id="galeri" class="com.kodcu.xml.Galeri">
        <!-- Setter Injection -->
        <property name="arac" ref="araba"/>
    </bean>

    <!-- Alternatif - Constructor Injection
     <bean id="galeri" class="com.kodcu.xml.Galeri">
         <constructor-arg ref="araba"/>
     </bean>
     -->

</beans>

Eşsiz ID değerleri araba ve galeri olan bu nesne deklaresyonları, Spring konteyner ayaklandığında, Spring konteyner üzerinde yönetimli nesneler olarak yaşamaya başlarlar. Spring konteyner üzerinde hazır olarak bekleyen bu nesneler, ApplicationContext arayüzü tipinden nesnelerle elde edilir. Zaten Spring konteyneri ayaklandırma işlemini de ApplicationContext arayüzü türünden nesneler sağlamaktadır. ApplicationContext türünden çeşitli soyut ve somut sınıflar bulunmakla birlikte, en çok kullandığımız 3 ApplicationContext nesne türünü aşağıdaki resim görebilirsiniz.

spring-application-context

ClassPathXmlApplicationContext : ClassPath içinde bulunan bir XML konfigürasyon dosyası üzerinden, Spring konteyneri yapılandırma ve yönetme işlerini sağlar.

FileSystemXmlApplicationContext : Dosyalama sisteminin herhangi bir konumunda bulunan bir XML konfigürasyon dosyası üzerinden, Spring konteyneri yapılandırma ve yönetme işlerini sağlar.

AnnotationConfigApplicationContext : Notasyon uygulanmış sınıflardan veya Java konfigürasyon sınıfları üzerinden, Spring konteyneri yapılandırma ve yönetme işlerini sağlar.

Peki Yöntem 1 kısımındaki XML kütüğü kullanılarak Spring konteyner nasıl başlatılır ve konteyner üzerinden nesneler nasıl elde edilebilir?


ApplicationContext context = 
new ClassPathXmlApplicationContext("spring-config-xml.xml");
Galeri galeri = context.getBean("galeri", Galeri.class);
//Galeri galeri = context.getBean(Galeri.class);
//Galeri galeri = (Galeri) context.getBean("galeri");
galeri.getArac().calis();

veya



ApplicationContext context =
new FileSystemXmlApplicationContext("src/main/resources/spring-config-xml.xml"); Galeri galeri = context.getBean("galeri", Galeri.class);
//Galeri galeri = context.getBean(Galeri.class);
//Galeri galeri = (Galeri) context.getBean("galeri");
galeri.getArac().calis();

Bu örnek kodlar çalıştırıldığında spring-config-xml.xml dosyası üzerinden Spring konteyner ayaklanır ve Galeri nesnesi üzerinden Araba nesnesini koşturmuş olur.

Eyl 15, 2013 10:28:06 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@506c589e: startup date [Sun Sep 15 10:28:06 EEST 2013]; root of context hierarchy
Eyl 15, 2013 10:28:06 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [spring-config-xml.xml]
Eyl 15, 2013 10:28:07 AM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@6bf256fa: defining beans [araba,galeri]; root of factory hierarchy
Araba çalışıyor..

Yöntem 2

Spring konteyner başlatılırken XML yapılandırıcı kullanılabilir fakat Spring nesnesi tanımlama ve enjeksiyon işlemleri notasyonlar ile sağlanabilir. Spring nesneleri XML yapılandırıcılarda deklare edildiği gibi, notasyonlar ile de deklara edilebilir. Örneğin;


@Component
public class Araba implements Arac {

    @Override
    public void calis() {
        System.out.println("Araba çalışıyor..");
    }
}

@Component notasyonu uygulanan her bir Java sınıfı, Spring konteyner tarafından yönetilebilir bir nesne adayı olma yeteneğine sahip olur. Fakat, yapılandırma işlemlerinde eğer notasyonlar kullanılacaksa, Spring konteyner bu konu hakkında bilgilendirilmelidir, yetki verilmelidir.


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<context:component-scan base-package="com.kodcu.not"/><!--(1)-->

</beans>

Örneğin yukarıdaki XML yapılandırıcısında, (1) adet yetki bildirimi tanımlanmaktadır. Bu yetkilendirme bir paket dizini altındaki notasyon uygulanmış sınıfları tarama yetkisi vererek, notasyonların kullanılmasını aktifleştirmektedir. Örneğin @Component, @Repository, @Autowired ve @PersistenceContext gibi. Bu ifade konteynere yetki verme bağlamında düşünülebilir.

Notasyon bazlı nesne tanımlamada, Galeri sınıfı ise aşağıdaki biçimde kullanılabilir.


@Component
public class Galeri {

    @Autowired // Araba komponentini buraya eriştirir
    private Arac arac;

    public Arac getArac() {
        return arac;
    }

    public void setArac(Arac arac) {
        this.arac = arac;
    }
}

@Component notasyonu Galeri sınıfına bir Spring Bean olabilme özelliği katarken, @Autowired notasyonu ise, konteyner üzerinde bulunan Arac arayüzü türünden bir nesneyi, global [ private Arac arac; ] alanına enjeksiyon yöntemiyle eriştirir. Bu uygulama da bir önceki yöntemde olduğu gibi aşağıdaki biçimde işletilebilir.


ApplicationContext context = 
new ClassPathXmlApplicationContext("spring-config-not.xml");
Galeri galeri = context.getBean("galeri", Galeri.class);
galeri.getArac().calis(); 

Uygulama çıktısı bir önceki yöntemdeki gibi olmaktadır. Bu yazıda XML konfigürasyon dosyaları üzerinden yapılandırma sağlarken, önümüzdeki günlerde yayınlanacak yazıda Java sınıfları üzerinden yapılandırma örnekleri paylaşılacaktır.

Uygulama örneklerine bu bağlantıdan erişebilirsiniz.

Tekrar görüşmek dileğiyle.

Tag:backend, spring, Xml

  • Share:
author avatar
Kodedu

Previous post

Java EE 7 - Concurrency Utilities
30 Eylül 2013

Next post

Java EE 7 - Concurrency Utilities
23 Ekim 2013

You may also like

api-logo
Swagger Nedir? Neden kullanılır?
10 Ekim, 2018
spring-cli-logo
Spring CLI ile Spring Boot Projeleri Hazırlamak
21 Ağustos, 2017
eureka_architecture
Spring Cloud Netflix ve Eureka Service Discovery
3 Temmuz, 2017

    1 Comment

Leave A Reply Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta listesine kayıt olun!






Gözde yazılar

Netmera ile Röportaj
18Haz2012
Spring CLI ile Spring Boot Projeleri Hazırlamak
21Ağu2017
Performans, Yük ve Stres Testleri
26Ağu2012
CDI – @Produces, @New ve @PostConstruct Notasyonları
22Tem2013

Son Yazılar

  • Java’da Record’lar 27 Ocak 2020
  • Swagger Nedir? Neden kullanılır? 10 Ekim 2018
  • Spring CLI ile Spring Boot Projeleri Hazırlamak 21 Ağustos 2017
  • Spring Cloud Netflix ve Eureka Service Discovery 3 Temmuz 2017
  • Online React.js Eğitimi ardından (15-25 Mayıs 2017) 31 Mayıs 2017

Son Yorumlar

  • Coupling ve Cohesion Kavramları Nedir? için Hilal
  • Naïve Bayes Sınıflandırma Algoritması için Rahman Usta
  • Naïve Bayes Sınıflandırma Algoritması için Mete
  • YAML Nedir? Neden YAML Kullanmalıyız? için kara
  • JWT (JSON Web Tokens) Nedir? Ne işe yarar? için Furkan

Get Java Software

Arşivler

Bizi takip edin

React.js Eğitimi Başlıyor
11-22 Eylül, 2017
Eğitmen
Rahman Usta
İletişim

merhaba@kodedu.com

  • Hakkında
  • Gizlilik Politikası
  • İletişim
  • Referanslar
Kodedu Bilişim Danışmanlık
Cemil Meriç mah. Çelebi sok.
No:16/3 Ümraniye/İSTANBUL
Tel: 0850 885 38 65
Alemdağ V.D.: 8960484815

KODEDU © Tüm hakları saklıdır.