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 :
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">
<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 :
Lalu jalankan program diatas, apa yang tercetak? program diatas akan menghasilkan keluaran seperti ini :
Nim : null
Nama : nullMengapa 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




11 comments
1 ping
enss
23/06/2010 at 15:40 (UTC 7)
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]
Jayusman
07/01/2011 at 13:21 (UTC 7)
Mas kus,, klo pake anotation juga spring juga… masih bisa dipake gak dalam waktu program di jalankan???
[Reply]
Kus Andriadi Reply:
January 7th, 2011 at 18:31
maksudnya?
[Reply]
chabi
05/02/2011 at 23:26 (UTC 7)
om kus,ada tutorial java dari yg simpel2 gak..
dari yg bisa simpan,ubah,hapus n laporan..
nnt baru framework nya..
trims ya om…
[Reply]
Kus Andriadi Reply:
February 6th, 2011 at 08:33
wah gak ada :D saya biasanya kalo kaya gitu cari2 aja di google banyak :D
[Reply]
bahrie
21/04/2011 at 05:37 (UTC 7)
mas, saya mraktekkin persis yg mas buat kq error ya..
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@145f0e3: defining beans [people]; root of factory hierarchy
Apr 21, 2011 5:28:30 AM org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@145f0e3: defining beans [people]; root of factory hierarchy
Exception in thread “main” org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘people’ defined in class path resource [bahri/latihan/spring-ctx.xml]: Instantiation of bean failed; nested exception is java.lang.IllegalStateException: No bean class specified on bean definition
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:955)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:901)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:872)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:83)
at bahri.latihan.TestSpring.main(TestSpring.java:22)
yang kurang apanya??
baris ke 22 :
applicationContext=new ClassPathXmlApplicationContext(“/bahri/latihan/spring-ctx.xml”);
mohon pencerahannya.. :D
saya pake library bawaan netbeans. Spring Framework 3.0.2
[Reply]
Kus Andriadi Reply:
April 24th, 2011 at 18:40
udah di ym ya :)
[Reply]
Daniel
13/05/2011 at 09:51 (UTC 7)
mas,, biasa spring dipakai pada saat apa?? bukankah biasa bean harus nya nilai nya dinamik?? kalau seperti contoh diatas seperti nya nilainya menjadi static…
[Reply]
Kus Andriadi Reply:
May 13th, 2011 at 11:28
bisa static, bisa dynamic….kalau kita ingin menggabungkan nya dengan hibernate misal, itu sessionfactory nya juga static kan? :D
contoh yang dynamic…
GenericApplicationContext genericApplicationContext = new GenericApplicationContext();
BeanDefinitionBuilder bdb = BeanDefinitionBuilder.rootBeanDefinition(People.class);
bdb.addPropertyValue(“nim”, “0811503721″);
genericApplicationContext.registerBeanDefinition(“peopleAh”, bdb.getBeanDefinition());
People people1 = (People) genericApplicationContext.getBean(“peopleAh”);
System.out.println(“Nim : ” + people1.getNim());
jadi memang tergantung kebutuhan aja :D
[Reply]
Geralvin
20/11/2011 at 21:36 (UTC 7)
mas mau tanya.. itu kan value nya masih static..
kalo dynamic gmn ya? sbenernya masih agak bingung sama konsek Dependency injection ini..
[Reply]
KusAndriadi.com » [Java] Mengenal Spring Framework : Reference Injection
08/07/2010 at 09:31 (UTC 7)
[...] 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 [...]