Spring Framework Projesi Nasıl Oluşturulur?

Spring Framework, Spring ekosistemi içerisinde yer alan en temel projedir. Spring Boot, Spring Data gibi diğer projeler Spring Framework projesini temel alarak oluşturulmuştur. Bu nedenle bu yazımızda ilk olarak en saf haliyle nasıl bir Spring Framework projesi oluşturabileceğinizi göstereceğiz.

Bir önceki Spring Framework Nedir? - Spring Ekosistemi başlıklı yazımızda Spring ekosistemi ve Spring Framework hakkında detaylı bilgiler vermiştik. Bu yazımızda da ilk Spring projemizi nasıl oluşturacağımızı göstererek devam ediyoruz.

Spring Framework, 8 gruba (feature) ayrılmış yaklaşık 20 modülden oluştur. Grupları aşağıdaki şemada görebilirsiniz.

Spring Framework Runtime

Bu modüllerin listesini ve artifact'lerini de bir tabloya dökersek aşağıdaki gibi olacaktır.

GroupIdArtifactIdDescription

org.springframework

spring-aop

Proxy-based AOP support

org.springframework

spring-aspects

AspectJ based aspects

org.springframework

spring-beans

Beans support, including Groovy

org.springframework

spring-context

Application context runtime, including scheduling and remoting abstractions

org.springframework

spring-context-support

Support classes for integrating common third-party libraries into a Spring application context

org.springframework

spring-core

Core utilities, used by many other Spring modules

org.springframework

spring-expression

Spring Expression Language (SpEL)

org.springframework

spring-instrument

Instrumentation agent for JVM bootstrapping

org.springframework

spring-instrument-tomcat

Instrumentation agent for Tomcat

org.springframework

spring-jdbc

JDBC support package, including DataSource setup and JDBC access support

org.springframework

spring-jms

JMS support package, including helper classes to send/receive JMS messages

org.springframework

spring-messaging

Support for messaging architectures and protocols

org.springframework

spring-orm

Object/Relational Mapping, including JPA and Hibernate support

org.springframework

spring-oxm

Object/XML Mapping

org.springframework

spring-test

Support for unit testing and integration testing Spring components

org.springframework

spring-tx

Transaction infrastructure, including DAO support and JCA integration

org.springframework

spring-web

Foundational web support, including web client and web-based remoting

org.springframework

spring-webmvc

HTTP-based Model-View-Controller and REST endpoints for Servlet stacks

org.springframework

spring-websocket

WebSocket and SockJS infrastructure, including STOMP messaging support

Bir Spring Framework projesi oluşturabilmek için Spring ekosisteminin temeli olan Spring Core Container grubunu kullanmamız gerekecek. Çünkü diğer tüm Spring projeleri core modülü ile türetilebilir.

Spring Framework projemizi Maven veya Gradle ile aracılığıyla rahatlıkla oluşturabiliriz. Her ikisini de hızlıca göz atalım.

1. Maven ile Spring Framework Projesi Oluşturma

Maven paket yöneticisi ile Spring Framework projesi oluşturabilmek için öncelikle kullandığınız editörde "New Project" işlevi ile proje oluşturma ekranını açınız.

Ardından Maven paket yöneticisini seçiniz.

Açılan pencerede proje adımızı belirledikten sonra groupId / ArtifactId / Version bilgilerini de opsiyonel olarak girerek projemizi oluşturuyoruz.

Bu işlemden sonra proje kurulumu tamamlanmış oluyor.

Artık sıra Spring Framework paketlerimizi eklemeye geldi. En temelde Core paketlerimizi eklediğimizde Spring Framework projemiz kullanıma hazır hale gelecektir. Bunun için spring-context artifact'ini eklememiz diğer tüm bağımlı olduğu core paketlerinin de eklenmesini sağlayacaktır. Aşağıdaki dependecy kodunu direkt olarak pom.xml dosyasına ekleyebilirsiniz.

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.13</version>
    </dependency>
</dependencies>

Ardından pom.xml dosyamız şu şekilde gözükecek ve Load Maven Changes işleminin ardından dikkat ettiğinizde göreceğiniz gibi tüm core paketleri External Libraries altında görebileceksiniz.

Tebrikler! Artık Spring Framework projeniz hazır ve en pure haliyle projenizi geliştirmeye başlayabilirsiniz.

2. Gradle ile Spring Framework Projesi Oluşturma

Gradle ile Spring Framework projesi oluşturmanın Maven ile Spring Framework projesi oluşturmaktan hiç bir farkı yoktur. Tek yapmanız gereken öncelikle New Project sayfasında Gradle paket yöneticisini seçmek olacaktır.

Açılan pencerede proje adımızı belirledikten sonra groupId / ArtifactId / Version bilgilerini de opsiyonel olarak girerek projemizi oluşturuyoruz.

Bu işlemden sonra proje kurulumu tamamlanmış oluyor.

Şimdi sıra Spring Core Container'i projemize eklemeye geldi. Bunun için aynı şekilde spring-context artifact'ini Gradle için ekleyeceğiz. Aşağıdaki kod yardımızyla bunu yapabilirsiniz.

implementation 'org.springframework:spring-context:5.3.16'

Yeniden tebrikler! Tekrardan Spring Framework projeniz hazır ve en pure haliyle projenizi geliştirmeye başlayabilirsiniz.

3. Projede Oluşturulacak POJO Class Oluşturmak

Spring Framework projesi örneğimizde Bean olarak kullanmak için çok dummy bir POJO classı üretelim.

package model;

public class User {
    private String name;
    private String surname;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }
}

NOT: Application Context ve Bean konusunu bir sonraki yazımızda oldukça detaylı inceleyeceğiz. Şimdilik Application Context'i obje havuzu, Bean'leri ise bu havuza eklenen objeler olarak düşünmeniz yeterlidir.

Bu andan itibaren BeanFactory interface'nin bize sunduğu üç yöntemle yolumuza devam edebiliriz. Bunlar;

  1. XML İle ApplicationContext oluşturmak
  2. Annotation ile ApplicationContext oluşturmak
  3. Programatik yöntemle ApplicationContext oluşturmak

Tüm bu yöntemlerin hepsini notta da belirttiğim gibi bir sonraki yazımızda oldukça detaylı inceleyeceğiz. Şimdilik sadece XML yöntemi ile ApplicationContext oluşturarak projemizi teml seviyede bırakalım.

4. XML ile ApplicationContext Oluşturmak

Eski ve benim beğenmediğim bir yöntem olan XML yöntemi ile ApplicationContext oluşturarak Spring Framework projemize ruh verelim. Bunun için ilk olarak resources dizini altında spring.xml isimli dosyamızı aşağıdaki satırlarla oluşturalım.

<?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="user" class="model.User"/>
</beans>

Objemizi Spring contexte eklemesi için XML dosyamızda bunu belirttik. Şimdi geriye kalan tek şey Spring Framework projemizi bu spring.xml dosyası ile başlatmak ve Spring'in ilgili objeleri oluşturarak ApplicationContext'e eklemesini sağlamak olacak. Bunun için main classımızda ClassPathXmlApplicationContext'e argümant olarak ilgili dosya adını geçmeliyiz. Aşağıdaki kodlarla bunu kolaylıkla yapabilirsiniz.

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringApplication {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
    }
}

Nesnemizin oluşup oluşmadığını test etmek için ApplicationContext'ten obje id si veya objemizin type'ı ile nesnemizi çağıralım ve nesnemizi ekrana bastıralım.

import model.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringApplication {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");

        User user1 = context.getBean(User.class);
        User user2 = (User) context.getBean("user");

        System.out.println(user1.toString());
        System.out.println(user2.toString());
    }
}

Gördüğünüz gibi Spring Framework projemiz ayakta ve nesnelerimizi new lemeye gerek kalmadan contexten çağırıp kullanabiliyoruz. Bundan sonraki makalemizde şunları daha detaylı inceleyeceğiz;

  • ApplicationContext veya diğer adıyla Spring Context nedir ve nasıl kullanılır?
  • XML, Annotation ve Programatik yöntemle nasıl context oluşturulur?
  • Bean ve Component Nedir?
  • Autowiring Nedir?

Öyleyse diğer heyecan verici yazımızda görüşmek üzere..