DİKKAT: Yazıda çeşitli yanlışlar, yanlış açıkladığım yerler ya da göstermediğim değişiklikler olabilir, hepimiz yaptığımız işe ve farklılığına bağlı olarak çeşitli yanlışlar yapabiliyoruz ve sonucunda farklı çözümler bulabiliyoruz ya da benim yanlış bildiğim bir şey de olabilir. Haliyle hiçbir konuda da sorumluluk almıyorum yazıdaki herhangi bir metinden, bu yazı sadece yardımcı olması ümidiyle yazılmıştır. Şu anda göz gezdirirken bile olmaması gereken şekilde yazılmış yazılar görebiliyorum.

Bu yazımda benim de öğrenmekte olduğum Spring Framework'te basit bir proje oluşturacağız. Projemizde bir Controller, bir Component ve bu Component için de bir Service oluşturacağız.

Projenin kaynak kodu:

Kimdir bu Spring?

Spring Framework, Java tabanlı bir yazılım geliştirme ve uygulama çerçevesidir. Kod yazarken altyapı detaylarıyla ilgilenmek yerine amaca odaklanmak konusunda size yardım eder ve birçok büyük projede kullanılır. IOC (Inversion of Control), AOP (Aspect-Oriented Programming), MVC (Model-View-Controller) gibi modülleriyle bol bol kullanılır.

Bu kadar muhabbet yeterli sanırım, başlayalım.

Maven ile, spring-core modülünü indirmek:

1709113291093.webp

Her ne kadar ben IntelliJ kullansam da siz istediğiniz IDE'yi kullanabilirsiniz, her şey neredeyse aynı.
Önce sıfırdan bir proje oluşturuyorum ve Build system olarak Maven kullanacağımı belirtiyorum.










1709113422466.webp


Projemizi oluşturduktan sonra pom.xml dosyamızı açıp istediğimiz versiyonunu ekliyoruz. Ben son sürümü olan 6.1.4 sürümünü ekleyeceğim fakat siz daha yeni ya da eski versiyonlar için https://mvnrepository.com/ sitesine bakabilirsiniz.

Ekleyeceğimiz satırlar şunlar, bu satırları alıp properties içine yazacağız
HTML:
<dependency>
    <groupId>org.xerial</groupId>
    <artifactId>sqlite-jdbc</artifactId>
    <version>3.45.1.0</version>
</dependency>
HTML:
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>6.1.4</version>
</dependency>
1709114339539.webp

Değişiklikleri ekledikten sonra şimdi başlayabiliriz. Ben burada örnek olması açısından kaydolma konseptli, bir SQLite database'i içine üye adı ve şifre kaydedecek baştan savma bir proje yapacağım.


1709114139819.webp
Öncelikle classlarımızı oluşturalım. Burada tahmin edebileceğiniz gibi sonu Service ile biten Service, içinde Service geçmeyen class Component ve Main ise Controller olacak.











Şimdi sırada Annotation'larımızı eklemek var. Annotation'larımız Spring'e hangi dosyanın ne işe yaradığını ve neyin neyle bağlandığını gösterecek.

Öncelikle Main classımız ile başlıyorum.
1709115348840.webp

İki annotation kullanacağız biri @Configuration, diğeri ise @ComponentScan.

@Configuration:
Bu annotation bu classın konfigürasyon sınıfı olduğunu gösterir, diğer komponentleri tarar, bağlar ve kullanırız.

@ComponentScan(basepackages = "org.example"): Burası bize Komponentleri tarayacağı alanı ve org.example paketimiz içinde arayacağını belirtiyor.
AnnotationConfigApplicationContext context ... Context(Main.class): Bu yazı bizim konfigürasyonun Main.class içinde olduğunu söylüyor. Bunu başka bir dosyada daha yapabilirdik fakat lüzumu yok, böyle daha okunabilir. context objemizle diğer objelere erişip işlem yaptıracağız.


Şimdi sırada @Component yani mimar sınıfımız var, adı AddToSQL. Amele sınıfımız ise @Service sınıfımız olacak. Müdür abimiz Main, komponente emri veriyor, komponentimiz ise belirlenmiş amelemize işini yaptırıyor. Basitçe açıklamak gerekirse bütün yazıyı, herkes lafı geçirebildiğine yani. Neyse.

Screenshot from 2024-02-28 14-02-33.webp

Bu bizim az önce bahsettiğimiz @Component yani memur sınıfımız, amacı bizden inputları almak ve bunu bizim servis sınıfımıza yollayarak bu inputları amelemizin yani @Service sınıfımızın dosyaya kaydetmesini sağlamak.

private AddToSQLService addToSQLService: Burası AddToSQLService objemiz için bir değişken tanımlar.

@Autowired
public void userInput(AddToSQLService svc){ this.addToSQLService = svc}:
Burası AddToSQLService objesini projemize otomatik olarak enjekte eder, buradaki @AutoWired ifadesi ise dediğim gibi otomatik olarak bağlamaya yarıyor.

public void sendToService(){}: Basit bir sınıf burası, temel Java bilgisiyle anlaşılabilir fakat yine de açıklayayım: Bir scanner oluşturup kullanıcı adı ve şifre girişlerini birer string değerlerine alıp enjekte ettiğimiz objenin alakalı metoduna yolluyoruz, onun yapacağı işleri ise şimdi öğreneceğiz :D throws SQLException ise database'e eriştiğimiz için exception yersek çökmesin diye.






Şimdi sıra son sınıfımızda, @Service sınıfımız AddToSQLService. Burada yapacaklarımız ise aldığımız bu inputları oluşturulacak SQLite database'ine eklemek ve sonra da bitiş.

1709118653638.webp

Burası tamamen amelelik. SQLite ile database oluşturulması ve bu oluşturulanların projeye eklenmesi.

public AddToSQLService{}: Bu metot bizden istediğimiz şekilde database oluşturan stringimizi alıyor ve bu dosyayı oluşturuyor.

public addToSQLService(String name, String pass{}: Burası da kalan ameleliği yapıyor. Bizim daha önce oluşturup bu metodumuza yolladığımız name ve pass stringlerimizi alıyor (otomatik olarak bağlıyor yine), statementlarımızı hazırlıyor ve komutumuzu yolluyor ve herhangi bir aşamada hata çıkarsa onu da ekrana yazdırıyor alttaki catch ile.



Evet bunları bitirdiğimize göre şimdi ilk oluşturduğumuz context ile componentimizi çağıralım.
1709120475402.webp

Yeni iki satırımız var, biri bean dediğimiz objemize erişmemizi sağlıyor ve diğeri ise metodumuzu çağırmamızı sağlıyor.





Şimdi programımızı çalıştırıyoruz ve sonuç.
1709120664490.webp



Okuduğunuz için teşekkür ederim, bu yazıya dolaylı olarak sponsor olan EspressoLab (Wi-Fi ve kahve), Akbank (bedava kahve kampanyası :D) ve OpenAI şirketlerine teşekkürlerimi sunarım, yorumlarınızı bekliyorum :)
 

Dosya Ekleri

  • 1709113687358.webp
    1709113687358.webp
    11,7 KB · Görüntüleme: 74
  • 1709116149922.webp
    1709116149922.webp
    20,8 KB · Görüntüleme: 86
  • Screenshot from 2024-02-28 13-45-58.webp
    Screenshot from 2024-02-28 13-45-58.webp
    22,8 KB · Görüntüleme: 77
  • Screenshot from 2024-02-28 13-50-28.webp
    Screenshot from 2024-02-28 13-50-28.webp
    22,7 KB · Görüntüleme: 83
  • Screenshot from 2024-02-28 14-02-12.webp
    Screenshot from 2024-02-28 14-02-12.webp
    23,6 KB · Görüntüleme: 83
Son düzenleyen: Moderatör:
DİKKAT: Yazıda çeşitli yanlışlar, yanlış açıkladığım yerler ya da göstermediğim değişiklikler olabilir, hepimiz yaptığımız işe ve farklılığına bağlı olarak çeşitli yanlışlar yapabiliyoruz ve sonucunda farklı çözümler bulabiliyoruz ya da benim yanlış bildiğim bir şey de olabilir haliyle hiç bir konuda da sorumluluk almıyorum yazıdaki herhangi bir metinden, bu yazı sadece yardımcı olması ümidiyle yazılmıştır. Şu anda göz gezdirirken bile olmaması gereken şekilde yazılmış yazılar görebiliyorum.

Bu yazımda benim de öğrenmekte olduğum Spring Frameworkde basit bir proje oluşturacağız, projemizde bir Controller, bir Component ve bu Component için de bir servis oluşturacağız. Ben bu yazıda Java 21, Spring 6 ve diğer bağımlılıkları edinmek için Maven, IDE olarak ise IntelliJ Idea Ultimate kullanacağım.

Projenin kaynak kodu:

Kimdir bu Spring?

Spring Framework, Java tabanlı bir yazılım geliştirme ve uygulama çerçevesidir. Kod yazarken altyapı detaylarıyla ilgilenmek yerine amaca odaklanmak konusunda size yardım eder ve bir çok büyük projede kullanılır. IOC (Inversion of Control), AOP (Aspect-Oriented Programming), MVC (Model-View-Controller) gibi modülleriyle bol bol kullanılır.

Bu kadar muhabbet yeterli sanırım, başlayalım.

Maven ile, spring-core modülünü indirmek:

Eki Görüntüle 23004
Her ne kadar ben intelliJ kullansam da siz istediğiniz IDEyi kullanabilirsiniz, her şey neredeyse aynı .
Önce sıfırdan bir proje oluşturuyorum ve Build system olarak Maven kullanacağımı belirtiyorum.










Eki Görüntüle 23005

Projemizi oluşturduktan sonra pom.xml dosyamızı açıp istediğimiz versiyonunu ekliyoruz. Ben son sürümü olan 6.1.4 sürümünü ekleyeceğim fakat siz daha yeni ya da eski versiyonlar için https://mvnrepository.com/ sitesine bakabilirsiniz.

Ekleyeceğimiz satırlar şunlar, bu satırları alıp properties içine yazacağız
HTML:
<dependency>
    <groupId>org.xerial</groupId>
    <artifactId>sqlite-jdbc</artifactId>
    <version>3.45.1.0</version>
</dependency>
HTML:
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>6.1.4</version>
</dependency>

Değişiklikleri ekledikten sonra şimdi başlayabiliriz. Ben burada örnek olması açısından kayıt olma konseptli, bir sqlite databasesi içine üye adı ve şifre kaydedecek baştan savma bir proje yapacağım.


Eki Görüntüle 23008Öncelikle classlarımızı oluşturalım. Burada tahmin edebileceğiniz gibi sonu Service ile biten Service, içinde Service geçmeyen class Component ve Main ise Controller olacak.











Şimdi sırada Annotationlarımızı eklemek var, Annotationlarımız Springe hangi dosyanın ne işe yaradığını ve neyin neyle bağlandığını gösterecek.

Öncelikle Main classımız ile başlıyorum.
Eki Görüntüle 23010
İki annotation kullanacağız biri @Configuration, diğeri ise @ComponentScan.

@Configuration:
Bu annotation bu classın konfigürasyon sınıfı olduğunu gösterir, diğer komponentleri tarar, bağlar ve kullanırız.

@ComponentScan(basepackages = "org.example"): Burası bize Komponentleri tarayacağı alanı ve org.example paketimiz içinde arayacağını belirtiyor.
AnnotationConfigApplicationContext Context ... Context(Main.class): Bu yazı bizim konfigürasyonun Main.class içinde olduğunu söylüyor. bunu başka bir dosyada daha yapabilirdik fakat lüzumu yok, böyle daha okunabilir. context objemizle diğer objelere erişip işlem yaptıracağız.


Şimdi sırada @Component yani mimar sınıfımız var, adı AddToSQL. Amele sınıfımız ise @Service sınıfımız olacak. Müdür abimiz Main, komponente emri veriyor komponentimiz ise belirlenmiş amelemize işini yapıyor basitçe açıklamak gerekirse bütün yazıyı, herkes lafı geçirebildiğine yani. Neyse.

Eki Görüntüle 23019
Bu bizim az önce bahsettiğimiz @Component yani memur sınıfımız, amacı bizden inputları almak ve bunu bizim servis sınıfımıza yollayarak bu inputları amelemize yani @Service sınımızın dosyaya kaydetmesini sağlamak.

private AddToSQLService addToSQLService: Burası AddToSQLService objemiz için bir değişken tanımlar.

@Autowired
public void userInput(AddToSQLService svc){ this.addToSQLService = svc}:
Burası AddToSQLService objesini projemize otomatik olarak enjekte eder, buradaki @AutoWired ifadesi ise dediğim gibi otomatik olarak bağlamaya yarıyor.

public void sendToService(){}: Basit bir sınıf burası, temel java bilgisiyle anlaşılabilir fakat yine de açıklayayım. Bir scanner oluşturup kullanıcı adı ve şifre girişlerini birer string değerlerine alıp enjekte ettiğimiz objeyenin alakalı metoduna yolluyoruz, onun yapacağı işleri ise şimdi öğreneceğiz :D throws SQLException ise databaseye eriştiğimiz için exception yersek çökmesin diye.






Şimdi sıra son sınıfımızda, @Service sınıfımız AddToSQLService. Burada yapacaklarımız ise aldığımız bu inputları oluşturulacak SQLite databasesine eklemek ve sonra da bitiş.

Eki Görüntüle 23021
Burası tamamen amelelik. SQLite ile database oluşturulması ve bu oluşturulanların projeye eklenmesi.

public AddToSQLService{}: Bu metod bizden istediğimiz şekilde database oluşturan stringimizi alıyor ve bu dosyayı oluşturuyor.

public addToSQLService(String name, String pass{}: Burası da kalan ameleliği yapıyor. Bizim daha önce oluşturup bu metodumuza yolladığımız name ve pass stringlerimizi alıyor (otomatik olarak bağlıyor yine), statementlarımızı hazırlıyor ve komutumuzu yolluyor ve herhangi bir aşamada hata çıkarsa onu da ekrana yazdırıyor alttaki catch ile.



Evet bunları bitirdiğimize göre şimdi ilk oluşturduğumuz context ile componentimizi çağıralım.
Eki Görüntüle 23024
Yeni iki satırımız var, biri bean dediğimiz objemize erişmemizi sağlıyor ve diğeri ise metodumuzu çağırmamızı sağlıyor.





Şimdi programımızı çalıştırıyoruz ve sonuç.
Eki Görüntüle 23025


Okuduğunuz için teşekkür ederim, bu yazıya dolaylı olarak sponsor olan EspressoLab(wifi ve kahve), Akbank (bedava kahve kampanyası :D) ve OpenAI şirketlerine teşekkürlerimi sunarım, yorumlarınızı bekliyorum :)
Süper olmuş :)