Metaveriler (Metadata)

metaveriler-metadata (büyük resim için tıklayın)

Metaveriler

Meta kelimesi, Yunanca kökenli olup "ötesinde" veya "sonrası" anlamına gelir. Farklı bağlamlarda farklı anlamlar kazanabilir. Günlük dilde "meta", bir şeyin kendisini inceleyen veya onun üstünde olan bir kavramı ifade eder. Örneğin; Metafizik → Fizik ötesi, varlığın doğasını araştıran felsefe dalı. Metaveri (Metadata) → Verinin kendisi hakkında bilgi veren veri (örneğin, bir dosyanın oluşturulma tarihi, boyutu vb.).

Metaveriler (metadata), genellikle Java Annotations (Java Ek Açıklamaları) ile ifade edilir. Metaveriler, Java kodunu değiştirmeden, derleyiciye, araçlara veya çalışma zamanına ek bilgiler sağlayan yapılardır. Java'daki metaveriler genellikle annotation (ek açıklamalar) şeklinde bulunur. Bu ek açıklamalar, sınıflara, metodlara, değişkenlere veya parametrelere ek bilgi sağlar.

1. Java'nın Yerleşik Anotasyonları

Java, bazı yaygın kullanılan metaverileri varsayılan olarak sunar:

AnotasyonAçıklama
@OverrideBir metodun üst sınıftan geldiğini ve geçersiz kılındığını belirtir.
@DeprecatedEski ve artık kullanılmaması önerilen kodları işaretler.
@SuppressWarningsDerleyici uyarılarını susturur.
@FunctionalInterfaceFonksiyonel arayüzleri işaretler.
@SafeVarargsTür güvenliği uyarılarını bastırır.
@RetentionAnotasyonun yaşam süresini belirtir (derleme zamanında mı yoksa çalışma zamanında mı erişilebilir olacak).
@TargetAnotasyonun hangi öğelere uygulanabileceğini belirler (sınıf, metod, alan vs.).

2. Özel Anotasyon Tanımlama

Kendi metaverilerinizi oluşturmak için özel bir annotation tanımlayabilirsiniz.

Örnek:

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)

@interface LogExecutionTime {

    String value() default "Execution time logged";

 }

Bu özel @LogExecutionTime anotasyonu, bir metodun çalışma süresini loglamak için kullanılabilir.

3. Çalışma Zamanında Metaveri Kullanımı (Reflection API)

Java'nın Reflection API'si, metaverileri çalışma zamanında okumak için kullanılır.

Örnek:

import java.lang.annotation.*;

import java.lang.reflect.Method;

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)

@interface CustomAnnotation {    

  String description();

}

class MyClass {

@CustomAnnotation(description = "Bu özel bir metod")    

  public void myMethod() {        System.out.println("Çalışıyor...");    }

}

public class AnnotationReader {    

  public static void main(String[] args) throws Exception {

    Method method = MyClass.class.getMethod("myMethod");

    CustomAnnotation annotation = method.getAnnotation(CustomAnnotation.class);

    if (annotation != null) {  System.out.println("Metod Açıklaması: " + annotation.description()); }

   }

}

Bu kod, çalışma zamanında metod üzerindeki anotasyonu okuyarak bilgiyi ekrana yazdırır.

4. Spring, Hibernate ve Lombok Gibi Kütüphanelerde Kullanım

Java metaverileri, Spring, Hibernate ve Lombok gibi popüler kütüphanelerde sıkça kullanılır:

Spring'de Anotasyon Kullanımı

  • @Component → Bir sınıfı Spring bileşeni olarak işaretler.
  • @Service → Servis katmanı bileşenlerini işaretler.
  • @Repository → Veri erişim katmanı için kullanılır.
  • @Autowired → Bağımlılık enjeksiyonunu sağlar.

Örnek:

@Service

public class MyService {    public void doSomething() {        System.out.println("Servis çalışıyor...");    } }

Hibernate'de Anotasyon Kullanımı

  • @Entity → Bir sınıfı veritabanı tablosu olarak tanımlar.
  • @Table(name = "users") → Sınıfın bağlı olduğu tabloyu belirler.
  • @Column(name = "username") → Alanın veritabanındaki sütun ismini belirler.

Örnek:

@Entity @Table(name = "users")

public class User {    

@Id    

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;

@Column(name = "username")

private String username;

}

Lombok ile Kodun Sadeleştirilmesi

Lombok, boilerplate(basmakalıp) kodları azaltmak için anotasyonları kullanır:

  • @Getter ve @Setter → Otomatik olarak getter ve setter metodları oluşturur.
  • @ToString → toString() metodunu otomatik oluşturur.
  • @AllArgsConstructor → Tüm alanları içeren bir constructor oluşturur.

Örnek:

import lombok.Getter;

import lombok.Setter;

@Getter 

@Setter

 public class User {    

private String name;    

private int age;

}

Sonuç

Java’daki metaveriler, anotasyonlar (annotations) ile ifade edilir ve birçok farklı kullanım alanı vardır:

  1. Kod organizasyonu ve okunabilirliği artırır.
  2. Spring, Hibernate, Lombok gibi kütüphanelerde yaygın olarak kullanılır.
  3. Reflection API ile çalışma zamanında okunabilir.
  4. Özel anotasyonlar ile kendi metaverilerinizi tanımlayabilirsiniz.

Bu sayede, Java programlarının daha düzenli, esnek ve yönetilebilir olması sağlanır.

*Gönderi ve görsel chatgpt ile oluşturulmuştur.

omurs

Ö S, 30 Ağustos 2018 Perşembe 15:30 tarihinde kayıt oldu

Etiketler

Beğeni


Yıllara Göre Gönderiler








LombokLoglamaB2C (Business-to-Consumer)B2B (Business-to-Business)İçerik Yönetim Sistemi - CMS (Content Management System)Pagination (Sayfalama)Sanal Özel Ağ - VPN (Virtual Private Network)Cronjob (Zamanlanmış Görevler)Printer-YazıcıJava'daki İlkel Veri Tipleri ve Alabilecekleri DeğerlerBit & Byte ve Hafıza Boyutlarındaki Ölçüm BirimleriSanallaştırma (Virtualization)DNS KayıtlarıE-Fatura ve E-ArşivYazılım Lisans TürleriAudit (Denetim) Açık Kaynak (Open Source)Monitoring (İzleme)Sitemap & Robots.txtKilometretaşı (Milestone)BSMV (Banka ve Sigorta Muameleleri Vergisi)KKDF (Kaynak Kullanımı Destekleme Fonu)Siber Pazartesi (Cyber Monday)Black Friday (Kara Cuma)Hotlink.htaccessCryptoLockerMalwareTrojanWormDependency (Yazılım Geliştirme Sürecinde Paket Bağımlılığı)Configuration (Yazılım Geliştirme Sürecinde Yapılandırma)Yahoo ve Yahoo'nun Başarısızlık NedenleriArchiving (Yazılım Geliştirme Sürecinde Arşivleme)Görsel Dosya Türleri (Image Types)ReleaseVersioning & Tagging (Versiyonlama ve Etiketleme)BuildJob (Yazılım Geliştirme Sürecinde Görevler)SonarQubeCDATA (Character Data)Alan Adı Uzantıları (Domain Name Extensions)Regresyon Kara Kutu (Black-Box) TestBeyaz Kutu (White-box) TestGri Kutu (Grey-box) TestYazılım Geliştirme Sürecindeki Temel Test TürleriKod gözden geçirme (Code Review)Birim Testi (Unit Testing)Yazılım Sürecinde EntegrasyonJAR & WAREager & Lazy Fetch TypeMaskelemeKPI (Key Performance Indicator)KII (Key Impact Indicator)Projenin JAR Dosyasını Oluştur - JAR PathSunucu için Linux dağıtım SeçimiKonyteynerler (container technologies)Runtime & Compile Time (Çalışma ve Derleme Zamanı)@Anotasyonlar (@Annotations)