[Java] Mengenal Spring Framework : Dependency Injection
Spring merupakan salah satu framework DI yang cukup populer dan banyak digunakan oleh developer Java sekarang ini. Bahkan saya pernah membaca salah satu thread di Java User Group Indonesia bahwa Spring dan Hibernate sudah menjadi standar untuk membuat aplikasi dengan Java. Mengapa kita harus belajar Spring? tentunya “ikut-ikutan teman” adalah jawaban yang kurang bisa di terima, hehe….Ada banyak teknologi yang diadopsi oleh Spring, tapi core dari Spring adalah DI atau IOC yang benar-benar memudahkan kita untuk membangun sebuah aplikasi, membuat code kita menjadi lebih rapih dan lebih simple, kita tidak perlu lagi menginisialisasi sebuah object, karena nantinya akan di load oleh Spring yang tentu saja sudah kita siapkan di XML, tapi dalam beberapa kasus, memang tidak semua object harus kita siapkan di Spring Container. Sebenarnya framework seperti Struts2 dan JSF juga menerapkan IOC, tapi kedua framework tersebut dikhususkan untuk Java Enterprise, yang tentu saja membuat pasar mereka tidak seluas Spring.
Spring sampai saat ini sudah mencapai versi 3.0, tidak ada lagi alasan eneg melihat XML ratusan baris karena sudah menerapkan anotasi yang membuat Spring terlihat sangat simple sekali. Berikut contoh simple nya, pertama-tama kita buat dulu sebuah kelas entity bernama People seperti ini :
public class People {
private String nim;
private String nama;
public String getNim() {
return nim;
}
public void setNim(String nim) {
this.nim = nim;
}
public String getNama() {
return nama;
}
public void setNama(String nama) {
this.nama = nama;
}
}
Kelas People adalah sebuah kelas entity biasa dengan variabel nim dan nama bertipe String, jangan lupa untuk membuat getter dan setter nya. Setelah itu kita buat file Spring-ctx.xml seperti dibawah ini :
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd"> <bean id="people" class="com.kusandriadi.entity.People"> <property name="nim" value="0811503721" /> <property name="nama" value="Kus Andriadi" /> </bean> </beans>
pada contoh spring-ctx diatas, kita membuat bean bernama people yang kita rujuk pada class People, disitu ada tag property yang mempunyai atribut nim dan nama, kita juga sudah menyiapkan value dari masing-masing property, value ini lah yang nantinya akan diinject ke dalam program kita oleh Spring. Adapun nama property tersebut adalah variabel yang telah kita siapkan pada kelas People sebelumnya, setelah itu buatlah kelas BelajarSpring sebagai kelas main seperti ini :
public class BelajarSpring {
private static ApplicationContext applicationContext;
public static void main(String[] args) {
People people = new People();
//cetak
System.out.println("Nim : " + people.getNim());
System.out.println("Nama : " + people.getNama());
}
}
Lalu jalankan program diatas, apa yang tercetak? program diatas akan menghasilkan keluaran seperti ini :
Nim : null Nama : null
Mengapa bisa null? Karena variabel yang telah kita siapkan pada kelas People, belum di inisialisasi, sehingga ketika dicetak akan menghasilkan null, pada beberapa contoh lain akan menghasilkan NullPointerException, sekarang mari kita ubah sedikit kelas BelajarSpring diatas menjadi seperti ini :
public static void main(String[] args) {
applicationContext = new ClassPathXmlApplicationContext("/com/kusandriadi/conf/spring-ctx.xml");
People people = (People) applicationContext.getBean("people");
//cetak
System.out.println("Nim : " + people.getNim());
System.out.println("Nama : " + people.getNama());
}
Lalu jalankan, dan akan mempunyai keluaran seperti ini :
Jun 23, 2010 2:40:32 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@be2358: startup date [Wed Jun 23 02:40:32 ICT 2010]; root of context hierarchy Jun 23, 2010 2:40:32 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions INFO: Loading XML bean definitions from class path resource [com/kusandriadi/conf/spring-ctx.xml] Jun 23, 2010 2:40:32 AM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1125127: defining beans [people]; root of factory hierarchy Nim : 0811503721 Nama : Kus Andriadi
Lihat pada baris 13 dan 14, nim dan nama sudah terinisialisasi dan tercetak dengan benar, adapun value tersebut telah diinject oleh spring karena sudah kita siapkan sebelumnya pada Spring Context. Bagaimana? tidak terlalu sulit bukan? ini hanyalah contoh kecil dari Spring, manfaat kita menggunakan Spring akan lebih terasa jika kita membangun aplikasi yang agak besar dan juga sudah bisa menggabungkan dengan Hibernate atau Ibatis (baca : Framework ORM kesayangan anda,huahaha…)
Regards

Kak, xml itu apa? Lalu file Spring-ctx.xml di atas berfungsi untuk apa?
Mohon pencerahan.. hehe :D
[Reply]
Kus Andriadi Reply:
July 1st, 2010 at 08:22
Spring Ctx itu Spring context, gimana yah..susah jelasinnya :P
[Reply]
[...] yang saya berikan tidak akan terlalu jauh berbeda dari contoh sebelumnya disini, Jadi saya sarankan anda membaca terlebih dahulu artikel saya tersebut agar anda mempunyai sedikit [...]