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.
POJO’nun Temel Özellikleri:
- Kural ve Bağımlılık Yok: POJO’lar herhangi bir framework’e veya kütüphaneye bağlı değildir.
- Basit Veri Yapısı: Genellikle sadece alanlar (fields) ve bu alanlar için getter/setter metodlarından oluşur.
- Serializable Olma Zorunluluğu Yoktur: POJO’lar Serializable veya diğer Java arayüzlerini implement etmek zorunda değildir.
- 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:
- Ön Tanımlı Yapıcı Metod (No-arg Constructor): JavaBeans, parametresiz (no-arg) bir yapıcı metoda sahip olmalıdır.
- 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.
- 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.
- Ö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.
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.
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 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 |
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.
Spring teknolojilerine yeni adapte olacak biri için rafine bir anlatım olmuş. Elinize sağlık.