Apa itu Spring Lazy Initialization

Posted: July 22, 2011 in Spring 3
Tags: , , ,

Pada dasarnya semua bean yang sudah kita deklarasikan di file xml akan diinisialisasi secara otomatis oleh Spring pada saat aplikasi pertama kali dijalankan. Bayangkan jika kita memiliki banyak deklarasi bean, lalu misalkan beanX hanya digunakan saat user melakukan proses insert data. Hal ini tentu tidak efisien karena akan membuang waktu dan memory.

Nah spring sendiri sudah menyediakan suatu fitur yaitu Spring Lazy Initialization. Dengan menggunakan spring lazy initialization maka bean akan diinisialisasi hanya saat terjadi proses request bean yang pertama. Untuk menggunakan spring lazy initialization pun cukup mudah, kita hanya perlu menggunakan keyword lazy-init=”true” saat mendeklarasi suatu bean.

Agar lebih jelas, perhatikan contoh berikut. Pertama buatlah sebuah class ClassBiasa di dalam package com.maniakjava.domain. Codenya seperti ini

package com.maniakjava.domain;

public class ClassBiasa
{
    public String isi;

    public String getIsi() {
        return isi;
    }

    public void setIsi(String isi) {
        this.isi = isi;
    }

    public ClassBiasa()
    {
        System.out.println("Constructor classBiasa dijalankan");
    }

}
 

Lalu buat sebuah class ClassLazy di dalam package yang sama.

package com.maniakjava.domain;

public class ClassLazy
{
    public String isi;

    public String getIsi() {
        return isi;
    }

    public void setIsi(String isi) {
        this.isi = isi;
    }

    public ClassLazy()
    {
        System.out.println("Constructor classLazy dijalankan");
    }
}
 

Sekarang buat sebuah file class-context.xml untuk mengkonfigurasi bean kita.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="beanBiasa" class="com.maniakjava.domain.ClassBiasa">
        <property name="isi" value="ini ClassBiasa"/>
    </bean>

    <bean id="beanLazy" class="com.maniakjava.domain.ClassLazy"  >
        <property name="isi" value="ini ClassLazy" />
    </bean>

</beans> 

Nah sekarang buat sebuah class Main3 di dalam package com.maniakjava.main

package com.maniakjava.main;

import com.maniakjava.domain.ClassBiasa;
import com.maniakjava.domain.ClassLazy;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main3
{
    public static void main(String args[])
    {
        BeanFactory beanfactory = new ClassPathXmlApplicationContext("class-context.xml");
        System.out.println("inisialisasi bean selesai");

        ClassBiasa classBiasa = (ClassBiasa) beanfactory.getBean("beanBiasa");
        System.out.println(classBiasa.getIsi());

        ClassLazy classLazy = (ClassLazy) beanfactory.getBean("beanLazy");
        System.out.println(classLazy.getIsi());
  }
}
 

Jalankan class Main3 tersebut dan lihat apa outputnya ? Ya, outputnya adalah

Constructor classBiasa dijalankan
Constructor classLazy dijalankan
inisialisasi bean selesai
ini ClassBiasa
ini ClassLazy

Terlihat kan constructor dari kedua bean akan dijalankan secara otomatis. Sekarang coba tambahkan lazy-init=”true” saat mendeklarasi beanLazy. Codenya menjadi seperti ini :

<bean id="beanLazy" class="com.maniakjava.domain.ClassLazy" lazy-init="true" >

Kemudian jalankan kembali class Main3 tersebut, maka outputnya akan menjadi :

Constructor classBiasa dijalankan
inisialisasi bean selesai
ini ClassBiasa
Constructor classLazy dijalankan
ini ClassLazy

Kelihatan kan jika beanLazy baru diinisialisasi saat dipanggil saja.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s