POJO, Spring Bean ve Java Bean Nedir? Bean ne demek?

Selamlar,

Bu yazımda sizlere POJO yani “Plain Old Java Object” ve Spring Bean tanımlamasının ne olduğunu ifade etmeye çalışacağım.

POJO Nedir?

Java’da yazılım geliştirme dünyasında sıkça karşılaşılan terimlerden biri olan “POJO” veya “Plain Old Java Object” basit ve temiz bir nesne modelini ifade eder. Öte yandan, Spring framework’ünün merkezinde yer alan “Spring Bean” işlemlerin yönetimini kolaylaştıran önemli bir bileşendir. Bunlar, yazılım geliştirme sürecinde JavaBean ile birlikte anlam kazanır.

public class SomePojo {
    private String fname;
    private String lname;

    public SomePojo(String fname, String lname) {
        this.fname = fname;
        this.lname = lname;
    }

    private String getFname() {
        return fname;
    }

    public void setFname(String fname) {
        this.fname = fname;
    }

    public String getLname() {
        return lname;
    }

    public void setLname(String lname) {
        this.lname = lname;
    }
}

Oluşturmuş olduğumuz bu java sınıfı framework’lerden bağımsız istenildiği gibi kullanılabilir. Başka herhangi bir nesne ile bağlantısı olmayan, bünyesinde instance variable, constructor, getter, setter ve toString gibi metodları barındırabilen en temel objeye POJO ismi verilir. Çok basit tanımlarsak eğer en temel Java nesnelerine verilen isim olarak belirtebiliriz. Aslında POJO’nun tam bir tanımının olmadığını söyleyebiliriz. Bazı kaynaklar bunun herhangi bir framework’e veya başka bir sınıfa bağımlılığı olmayan bir sınıf olarak tanımlıyor. Çok basit bir class oluşturup içerisine getter,setter ve constructor tanımladığımızı düşünelim. Artık bu sınıftan oluşturacağınız bir obje bizim için POJO’yu ifade ediyor diyebiliriz.

Başka bir örnek verecek olursak da örneğin bir API’den data çekiyorsunuz ve dönen datayı bir java objesi olarak tutmak istediniz. Yine en temel şekilde POJO’muzu oluşturup gelen dataları setter metodları veya constructor ile class’ımızın ilgili değişkenlerine atayarak bir obje oluşturdunuz. POJO’muz hayırlı olsun diyip işlere devam edebilirsiniz. POJO kavramını bu anlattıklarım gibi oldukça basit ve sade olarak en temel basit bir java objesi olarak düşünebilirsiniz.

İlgini çekebilir:  RequestMapping Nedir?

POJO’nun Temel Özellikleri:

  1. Kural ve Bağımlılık Yok: POJO’lar herhangi bir framework’e veya kütüphaneye bağlı değildir.
  2. Basit Veri Yapısı: Genellikle sadece alanlar (fields) ve bu alanlar için getter/setter metodlarından oluşur.
  3. Serializable Olma Zorunluluğu Yoktur: POJO’lar Serializable veya diğer Java arayüzlerini implement etmek zorunda değildir.
  4. Kapsayıcı (Container) Bağımsızdır: POJO’lar herhangi bir özel Java EE veya başka framework’ün desteğine ihtiyaç duymaz.

Java Bean – Java Bean Ne Demek?

Java Bean, Java uygulamalarında bileşen tabanlı programlamayı destekleyen bir yapıdır. Bu bileşenler, sadece veri saklamakla kalmaz, aynı zamanda iş mantığı ve erişim metotları da içerir. Java Bean tanımına göre bir sınıfın Bean olarak tanımlanabilmesi şu özelliklere sahip olmasına bağlıdır:

  • Public Constructor’a sahip olması
  • Serializable olması (implements Serializable)
  • Instance Variable erişimleri Getter/Setter metodları ile tanımlanmalı

Bu şartlardan yola çıkarak; Her Java Bean bir POJO’dur. Ancak her POJO bir Java Bean değildir.

Bazı kaynaklarda bu iki terimin eş olarak kullanıldığına denk gelmiş olabilirsiniz ancak bunun nedeni bu iki terimin de  “Enterprise Java Beans olmayan Java Class’ı” olarak tanımlanmasıdır. Yine de aralarındaki farkı bilmekte fayda var. Özellikle Spring ile ilgili iş arayanlar için POJO ve Bean kavramlarının ne olduğuna dair sorular karşınıza gelecektir.

JavaBean’lerin Temel Özellikleri:

  1. Ön Tanımlı Yapıcı Metod (No-arg Constructor): JavaBeans, parametresiz (no-arg) bir yapıcı metoda sahip olmalıdır.
  2. Serileştirilebilirlik: JavaBean sınıfı genellikle Serializable arayüzünü implement eder, bu da nesnelerin ağ üzerinden veya disk üzerine yazılabilir olmasını sağlar.
  3. Getter ve Setter Metodları: JavaBean, özel alanları için getter ve setter metodlarına sahip olmalıdır. Bu metodlar, JavaBean özelliklerine dış dünyadan kontrollü bir erişim sağlar.
  4. Özelliklere Erişim Kuralları: JavaBean özellikleri private olmalıdır. Böylece dış dünya doğrudan değişkenlere erişemez, sadece getter/setter metodları aracılığıyla erişim sağlanır.
İlgini çekebilir:  Spring Boot ile Caching

Spring Bean – Spring Bean Ne Demek?

Spring Bean, Spring Framework tarafından yönetilen ve oluşturulan nesneleri ifade eder. Bu nesneler, Spring uygulamalarının temel yapı taşlarıdır ve genellikle bağımlılık enjeksiyonuyla konfigüre edilirler.

Öncelikle Spring IoC hakkında bilginiz yoksa linke tıklayarak bu konuyu okumanızı tavsiye ederim. Bean kavramını Spring Framework yapısında merak ediyorsanız onu da şöyle ifade etmeye çalışayım ki bu konu kendi başına yeni bir yazı olabilecek niteliktedir. Bean kavramı Spring için temel konsepttir desek hatalı bir söylem ifade etmiş olmayız. Spring’i anlayabilmenin yolu Bean kavramını anlamaktan geçmekte.

Spring IoC Container tarafından örneklenen ve yönetilen, uygulamamızın temel yapıtaşlarını oluşturan şeylere Bean diyoruz. Örnek verecek olursak Spring projelerimizde bir Controller sınıfı içerisine bir Config, Service ya da Repository sınıfımızda oluşturulacak bir Bean’i Controller içerisinde kullanmak istediğimizde bunu Constructor Injection ile şu şekilde yapabiliriz:

@Controller
public class SomeController {
    private final SomeService service;

    @Autowired
    public SomeController(SomeService service) {
        this.service = service;
    }
}

Burada kullandığımız @Autowired ifadesini aynı zamanda constructor olmadan şu şekilde de kullanabilirdik ki buna da Field Injection adı verilmekte:

public class SomeController {
    @Autowired
    private SomeService service;
}

Ancak bu şekilde ki kullanımlarda debug atma şansınız kaybolur. Bu nedenle constructor içerisinde initialize edilecek şekilde kullanmanızı öneririm.

Servis sınıfımızı da şu şekilde tanımlayalım:

@Service
public class SomeService {
    //
}

@Autowired ifadesi ile controller sınıfımıza inject ettiğimiz servis sınıfımız kendisini @Service notasyonu ile tanımlamamızdan dolayı, uygulamamız ilk ayağa kalkarken bu sınıfından bir Bean oluşturuyor ve bunu IoC Container içerisine atıyor. Bu service objemize bağımlı olan controller sınıfımız da IoC Container içerisinde tanımlanan bu objeyi kendi içerisine inject ediyor. Yani sıfırdan yeni bir obje oluşturmak yerine var olan objeyi kullanıyor. Çünkü  Spring bizim için uygulamamızı kaldırırken servis sınıfımızdan yeni bir obje oluşturarak IoC Container’a koydu. Biz de lazım oldukça oradan alarak bu objeyi kullanacağız.

İlgini çekebilir:  @Bean Annotation Nedir?

Bu Bean, varsayılan olarak Singleton bean scope yapısına sahip olduğundan yalnızca bir defa örneklenmiş oldu. Bu sınıfı kullanan diğer sınıflar bir adet oluşturulmuş olan bu aynı Bean objesi üzerinden servis sınıfımızın işlevlerine erişti. Eğer aynı service/repository/configuration… yapısından farklı Bean’ler oluşturmak isteseydik o zaman Bean’in yaşam döngüsünü farklı olarak Prototype belirleyebilirdik. Buradan da bir Bean hangi scope’lara sahip olabilir ve bu scope’a detayları okuyabilirsiniz.

pojo

POJO ile Bean Arasındaki Farklar

Java’da nesne yönelimli programlamada iki temel kavram olan POJO (Plain Old Java Object) ve JavaBean, birbirine çok benzeyen fakat bazı önemli farklara sahip olan yapılar olarak karşımıza çıkar. POJO’lar daha basit, kuralsız veri yapıları sunarken, JavaBeans daha belirli kurallara sahip yapılar olarak tanımlanır.

Özellik POJO JavaBean
Tanım Sade, kuralsız Java nesnesi Sıkı kurallara tabi Java bileşeni
Yapıcı Metod Yapıcı metod zorunlu değildir Parametresiz (no-arg) yapıcı metod gereklidir
Serileştirme Serileştirilebilir olmak zorunda değil Genellikle Serializable arayüzünü implement eder
Getter/Setter İsteğe bağlıdır Getter ve Setter metodları zorunludur
Kapsayıcı Herhangi bir kapsayıcıya bağımlı değildir Özellikle JavaEE ve Spring gibi framework’ler tarafından kullanılır
Kullanım Alanı Genellikle basit veri taşıma ve nesne modellemesi Enterprise uygulamalar, GUI bileşenleri ve ORM gibi araçlar

POJO ve JavaBean benzer yapılar olsa da, JavaBean’ler daha kurallı ve belirli bir yapıya sahipken, POJO’lar daha basit ve kuralsız bir nesne modelidir. POJO’lar, esneklik ve basitlik sunduğu için küçük ve bağımsız projelerde tercih edilirken, JavaBeans genellikle büyük ölçekli kurumsal uygulamalarda, veritabanı yönetim sistemlerinde ve framework’lerde kullanılır. JavaBean, standart getter ve setter metodlarıyla araçlar ve framework’ler tarafından kolayca kullanılabilirken, POJO’lar bağımsızdır ve herhangi bir kısıtlamaya tabi değildir.

Initialize Ne Demek

Initialize genellikle bir şeyi başlatma, kurma veya hazırlama anlamına gelir. Özellikle programlama ve bilgisayar bilimlerinde kullanıldığında, bir değişken, nesne veya veri yapısını başlangıç değerleriyle doldurma işlemine atıfta bulunur.

Örneğin, bir programcı bir değişkeni başlangıç değeriyle tanımlamak için initialize işlemini kullanabilir. Bu, değişkenin boş bir değerle başlatıldığı ve daha sonra kullanılmak üzere ayarlandığı anlamına gelir.

Herkese iyi çalışmalar, hoşçakalın.

More Reading

Post navigation

  • Spring teknolojilerine yeni adapte olacak biri için rafine bir anlatım olmuş. Elinize sağlık.

Comments are closed.