09 Eylül 2013, 12:43 | #1 | |
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0) | Servlet ve Spring IOC Kullanımı Bu yazımda, Java ve özellikle Java EE uygulamalarında sunduğu Dependency Injection, Transaction Management, AOP gibi birçok teknolojiyi basitleştirerek kullanmamıza olanak veren Spring Frameworkü, Java Servletler içerisinde nasıl kullanacağımızı anlatan birkaç önemli ipucuna değineceğim. Bildiğiniz gibi Spring en temelde, POJO adını verdiğimiz Java classlarını kendi IOC containerı içerisinde yöneterek, uygulama bileşenlerinin bağımlılıklarını (dependencies) kontrol etmemize olanak veriyor. Dependency Injection adını verdiğimiz bu mekanizma sayesinde, sınıfların (servislerin) diğer sınıflara ya da servislere olan bağımlılıkları çok daha yönetilebilir oluyor. Bu yazının konusu Dependency Injection ve bunun sağladığı yararlar ve faydalar olmadığı için bu konuya derinlemesine değinmeyeceğim. Yazının konusu, Spring’in en temelde sağladığı bu mekanizmayı, Java Servletler içerisinde nasıl kullanabileceğimizi kapsıyor. Bildiğiniz gibi Java Servletler, bir Servlet Container tarafından instantiate edildiği için, Spring tarafından yönetilemezler. Spring, yönetemediği yani bir Spring Bean olmayan sınıflarda dependency injection gerçekleştiremez. Peki Spring’in sunduğu bu özellikleri Java servletlerimizde nasıl kullanacağız? İşte bu yazıda servletleri bir Spring bean gibi nasıl kullanabileceğimizi ve bu sayede Spring’in sunduğu teknolojileri nasıl entegre edebileceğimizi gösteren birkaç noktaya değineceğim. Bu sürecin tam 4 farklı yöntemi mevcut ( En azından benim bildiğim). Örneklere geçmeden önce, öncelikle neyi başarmak istediğimizi gösteren ufak bir senaryo hazırlamak istiyorum. Öncelikle Spring bean olarak bir business sınıfımız olduğunu varsayalım. Ve bunu da aşağıdaki gibi tanımlayalım. Interface şu şekilde. Kod: Kodu kopyalamak için üzerine çift tıklayın!
Ve concrete sınıfımız da bu şekilde. Kod: Kodu kopyalamak için üzerine çift tıklayın!
Yapmak istediğimiz şey ise, yukarıdaki MyBusiness adındaki Spring Bean sınıfımızı, hazırladığımız MyServlet adındaki servlet içerisine @Autowired ile doğrudan inject etmek. Artık yöntemlerimize geçebiliriz. 1 ) Spring HttpRequestHandler Interface kullanımı. Springin sunduğu bu interface sayesinde, doğrudan HTTP isteklerini işleyebiliyoruz. Bunun için servlet oluştururken HttpServlet sınıfını extend etmemize de gerek yok. Oluşturduğumuz POJO sınıfı sadece HttpRequestHandler interfacesini implement etmesi yeterli. Kod: Kodu kopyalamak için üzerine çift tıklayın!
Servletimizi bu şekilde tanımladıktan sonra artık gelen HTTP isteklerini rahatlıkla işleyebiliriz. Tabi web.xml dosyamıza eklememiz gereken birkaç satır daha var. Kod: Kodu kopyalamak için üzerine çift tıklayın!
Artık basit JavaBlogRequestHandler pojomuz, gelen Http isteklerini işleyebilen ve aynı zamanda bir spring bean olarak Spring’in sunduğu teknolojileri kullanabilen gelişmiş bir sınıfa dönüştü Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir. 2 ) processInjectionBasedOnServletContext Yöntemi Her ne kadar üstteki 1. yöntem en basiti gibi görünse de bazen HttpServlet sınıfını extend eden sınıflarda ya da daha önceden varolan servletlerimizde Spring teknolojilerini kulanmak isteyebiliriz. Bu gibi durumlar için Spring’in SpringBeanAutowiringSupport utility classı ile varolan servletimizi, Spring tarafından farkında olacak şekilde refactor edebiliyoruz. Kod: Kodu kopyalamak için üzerine çift tıklayın!
3 ) WebApplicationContext autowireBean() Yöntemi Yine HttpServlet sınıfını extend ederek oluşturduğumuz servlet sınıflarımızın Spring teknolojilerini kullanmamız için Spring’in WebApplicationContext’ine servletimizi de tanıtmamız gerekiyor. Bunun için yine Spring’in context utility sınıflarını kullanıyoruz. Kod: Kodu kopyalamak için üzerine çift tıklayın!
4 ) Context içerisinden Business classımızı doğrudan çağırmak. Yine HttpServlet türü servletlerimiz için, Spring’in Web Application Context içerisinden Business nesnemizi manuel olarak çağırabiliriz. Tabi bu yöntemle servletimize inject edeceğimiz beanleri @Autowired ile deklare edemiyoruz. Bunun yerine Spring contextden, inject etmek istediğimiz Spring Beanleri doğrudan çağırıp referansa atama yapıyoruz. Kod: Kodu kopyalamak için üzerine çift tıklayın!
Arkadaşlar bu konu hakkında benim söyleyeceklerim bu kadar. Umarım ihtiyacı olanlara faydalı olur. Alıntı | |
|
21 Kasım 2013, 21:58 | #2 |
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0) | Cevap: Servlet ve Spring IOC Kullanımı IOC, Spring'e has bir özellik değildir sadece bir yaklaşımdır. Temelinde ise, bağımlılık zerkeden sınıfların yaratılma safhasının geliştirici tarafından değilde framework tarafından sağlanmasıdır. Bu geliştiriciye mükemmel bir rahatlık sağlar. Çünkü siz bir service'i ayağa kaldırmak istediğinizde bunu new operatör yardımıyla yaparsınız fakat framework size yeni bir instance yaratmadan framework'ün injection yeteneği sayesinde Spring içinde @Autowired(service katmanı için) anotasyonu ile tanımlamanız yeterli olur. Instance'ı ayağa kaldırma olayını framework üstlenmiş olur Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir. Kısaca temelde budur. |
|
Etiketler |
ioc, kullanımı, servlet, spring, ve |
Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir) | |
| |
Benzer Konular | ||||
Konu | Konuyu Başlatan | Forum | Cevaplar | Son Mesaj |
JSP/JSF/Servlet Yeni Başlayanlar için gerekli araç gereçler | YazılımMimarı | JSF/JSP/Servlet | 0 | 15 Temmuz 2012 14:42 |