Şuayb'in BloguŞuayb'in Blogu
Ana Sayfa
Kategoriler
Oyunlar
MediumHakkındaİletişim
Dil
Tema
    1. Blog
    2. Programlama
    3. Spring Boot ile Aspect-Oriented Programming

Spring Boot ile Aspect-Oriented Programming

İlk yayın18 Aralık 2024
Son güncelleme19 Aralık 2024
Okuma süresi3 dk okuma
JavaKotlinSpring BootAOP
XLinkedInFacebook
Spring Boot ile Aspect-Oriented Programming

Beğeni yükleniyor...

Aspect-Oriented Programming (AOP), logging, transaction management ve güvenlik gibi birçok alana yayılan kesme noktalarını modüler hale getiren bir yaklaşımdır. Bu kılavuzda, Spring Boot kullanarak AOP uygulaması yapmayı Java ve Kotlin ile göstereceğiz.


Son güncelleme19 Aralık 2024

Toplam görüntülenmeGörüntülenme yükleniyor...

Önceki makaleSpring Boot ile Dependency InjectionSonraki makaleSpring Boot Actuator
Şuayb Şimşek

Yazan

Şuayb Şimşek

Spring Boot, güvenlik, mikroservis ve cloud-native mimari konularında pratik teknik notlar paylaşan backend odaklı fullstack geliştirici.

Uzmanlık

  • Spring Boot
  • Go
  • Mikroservis
  • Next.js
  • Cloud Native

Bağlantılar

GitHubLinkedInMedium

Benzer yazılar

Spring Boot Configuration Properties
Programlama

Spring Boot Configuration Properties

@ConfigurationProperties ile tip-güvenli yapılandırma tanımlamayı, @Validated ile ayarları doğrulamayı ve profile-specific application-{profile}.yml dosyalarıyla ortama göre değer yönetimini öğrenin.

4 Şubat 20263 dk okuma
JavaKotlinSpring BootYapılandırma
Spring Boot GraphQL JWE Kimlik Doğrulama
Programlama

Spring Boot GraphQL JWE Kimlik Doğrulama

Stateless şifreli JWT’ler (JWE) ile Spring Boot GraphQL API’lerinizi güvenli hale getirmeyi; kullanıcı kimliği ve rolleri JPA ile bir veritabanında saklamayı öğrenin.

17 Mayıs 20256 dk okuma
JavaKotlinSpring BootGüvenlikJWTJWEGraphQL
Spring Boot JPA ile JWE Kimlik Doğrulaması
Programlama

Spring Boot JPA ile JWE Kimlik Doğrulaması

Stateless şifreli JWT’ler (JWE) kullanarak Spring Boot API’lerinizi güvenli hale getirirken, kullanıcı kimliklerini ve rolleri JPA destekli bir veritabanında nasıl saklayacağınızı öğrenin.

11 Mayıs 20254 dk okuma
JavaKotlinSpring BootGüvenlikJWTJWEJPA

Hakkımda

Spring Boot, mikroservis, güvenlik ve daha fazlası hakkında yazılar.

İletişimYeni başladıysan

Son yazılar

  • Captain Tsubasa 2: World Fighters
  • Captain Tsubasa: Rise of New Champions
  • Spring Boot Configuration Properties
  • Spring Boot GraphQL JWE Kimlik Doğrulama
  • Spring Boot JPA ile JWE Kimlik Doğrulaması

Popüler konular

JavaKotlinSpring BootGüvenlikJWEJWT

Abone ol

Yeni yazılar yayınlandığında pratik backend ve fullstack notlarını al.

Sosyal

© 2024-2026 Şuayb'in Blogu. Tüm hakları saklıdır.

🌟 Neden AOP Kullanmalısınız?

AOP, bir uygulamanın birden fazla bölümünü etkileyen logging veya güvenlik gibi konuları tekrar kullanılabilir aspect'ler haline getirmek için kullanılır. Bu yöntem daha temiz kod, geliştirilmiş bakım kolaylığı ve azaltılmış kod tekrarı sağlar.


📋 Gereksinimler

📋 Aşağıdakilere sahip olduğunuzdan emin olun:

  • ☕ Java Development Kit (JDK) 17+
  • 📦 Maven veya Gradle kurulu
  • 🔤 Java IDE (IntelliJ IDEA, Eclipse veya VS Code)

🛠️ Adım 1: Bağlılıkları Ekleyin

Projenize aşağıdaki bağlılıkları dahil edin:

Maven:

XMLpom.xml
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

Gradle:

GROOVYbuild.gradle
implementation 'org.springframework.boot:spring-boot-starter-aop'

🛠️ Adım 2: Bir Servis Tanımlayın

AOP'yi göstermek için basit bir servis oluşturun.


🛠️ Adım 3: Bir Aspect Oluşturun

Method çalışma detaylarını loglamak için bir aspect tanımlayın.


🛠️ Adım 4: Bir Controller Oluşturun

Servis methodlarını bir REST controller üzerinden sunun.


▶️ Uygulamayı Çalıştırma

Aşağıdaki komutlarla uygulamayı çalıştırın:

Spring Boot (Java/Kotlin): Kurulumun doğru çalıştığını doğrulamak için uygulamayı tercih ettiğiniz dil yığınıyla başlatın.

BASH
./mvnw spring-boot:run

API'ye şu adresten erişebilirsiniz: http://localhost:8080/api/users.


🧪 API'yi Test Edin

API'yi aşağıdaki cURL komutları ile test edebilirsiniz:

  • Tüm kullanıcıları getir:
BASH
curl -X GET http://localhost:8080/api/users
  • Bir ID'ye göre kullanıcı getir:
BASH
curl -X GET http://localhost:8080/api/users/1

🏁 Sonuç

Artık Aspect-Oriented Programming için üretim odaklı bir Spring Boot temeliniz var. Sonraki adımda ayarları kendi domainine uyarlayıp test ve gözlemlenebilirlik katmanını ekleyerek gerçek trafik altında doğrulayın.

Servis

JAVAUserService.java
package com.example.demo.service;

import org.springframework.stereotype.Service;

@Service
public class UserService {

    public String getUserById(String id) {
        return "ID'ye sahip kullanıcı: " + id;
    }

    public String getAllUsers() {
        return "Tüm kullanıcılar alınıyor.";
    }
}

Servis

KOTLINUserService.kt
package com.example.demo.service

import org.springframework.stereotype.Service

@Service
class UserService {

    fun getUserById(id: String): String {
        return "ID'ye sahip kullanıcı: $id"
    }

    fun getAllUsers(): String {
        return "Tüm kullanıcılar alınıyor."
    }
}

Aspect

JAVALoggingAspect.java
package com.example.demo.aspect;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class LoggingAspect {

    private static final Logger logger = LoggerFactory.getLogger(LoggingAspect.class);

    @Before("execution(* com.example.demo.service.UserService.*(..))")
    public void logBefore() {
        logger.info("Method çalıştırılmaya başlandı.");
    }
}

Aspect

KOTLINLoggingAspect.kt
package com.example.demo.aspect

import org.aspectj.lang.annotation.Aspect
import org.aspectj.lang.annotation.Before
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Component

@Aspect
@Component
class LoggingAspect {

    private val logger = LoggerFactory.getLogger(LoggingAspect::class.java)

    @Before("execution(* com.example.demo.service.UserService.*(..))")
    fun logBefore() {
        logger.info("Yöntem çalıştırılmaya başlandı.")
    }
}

Controller

JAVAUserController.java
package com.example.demo.controller;

import com.example.demo.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/users")
@RequiredArgsConstructor
public class UserController {

    private final UserService userService;

    @GetMapping("/{id}")
    public String getUserById(@PathVariable String id) {
        return userService.getUserById(id);
    }

    @GetMapping
    public String getAllUsers() {
        return userService.getAllUsers();
    }
}

Controller

KOTLINUserController.kt
package com.example.demo.controller

import com.example.demo.service.UserService
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController

@RestController
@RequestMapping("/api/users")
class UserController(
    private val userService: UserService
) {

    @GetMapping("/{id}")
    fun getUserById(@PathVariable id: String): String = userService.getUserById(id)

    @GetMapping
    fun getAllUsers(): String = userService.getAllUsers()
}