19 November 2012

Integrasi Swing dan Spring Framework

Pembaca yang budiman, Swing Framework merupakan salah satu framework pada java yang lebih condong kepada aplikasi Java Desktop. Swing Framework dapat beradaptasi menjadi sebuah client pada struktur aplikasi client-server, tapi bisa juga sebagai sebuah standalone application, karena memang tujuannya sebagai presentation layer dalam sebuah aplikasi java.  
Meluasnya penggunaan Spring Framework dalam kegiatan development aplikasi java disebabkan karena tawaran kemudahan maintenance dan management struktur project di dalamnya. Integrasi antar framework pun menjadi kerap suatu hal yang lumrah demi mencari sebuah arsitektur aplikasi yang simple dalam pengaturannya, tapi powerfull dalam pemanfaatanya, juga tidak melupakan estetika dalam presentasinya.
Kali ini kita akan mencoba mengintegrasikan Spring Framework ke dalam Aplikasi Java GUI (Swing). Skup pembahasan kita kali ini terbatas pada menggunakan Spring Framework untuk pemanggilan form-form yang ada terlibat pada aplikasi kita. Mari kita mulai dengan langkah-langkah sebagai berikut ini:
 
1. Buat sebuah project yang melibatkan maven sebagai otomatisasi development-nya. Adapun isi dari file pom.xml project tersebut seperti dibawah ini:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>SwingSpring3</groupId>
    <artifactId>SwingSpring3</artifactId>
    <version>1.0</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>3.1.2.RELEASE</version>
            <type>jar</type>
        </dependency>
    </dependencies>
</project>


Dari file pom.xml tersebut kita bisa melihat penggunaan Spring Framework pada tag xml dependency. Untuk pembahasan ini kita menggunakan Spring-Framework versi 3.12, kemudian project ini juga menggunakan plugin maven-compiler-plugin dengan source level 1.6 untuk target 1.6 juga. Berikut ini adalah tampilan gambar struktur project ini:

2. Buat sebuah form utama yang meng-extends JFrame dengan sebuah menu-bar dan 2 buah menu item dan beri nama sebagai MainApp. Form ini akan kita pakai sebagai form utama yang nantinya akan memanggil form-form lain yang kita extends dari JPanel, seperti gambar berikut ini:

3. Kemudian buat dua buah form lagi yang meng-extends JPanel, dan beri nama sebagai Form1 dan Form2 dengan isi form tersebut terserah anda.
4. Langkah selanjutnya adalah membuat file Spring Configuration yang kita beri nama sebagai appContext.xml  dan kita letakkan di dalam path src/main/resources seperti gambar struktur project diatas. Adapun isi file tersebut adalah 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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <context:annotation-config/>
    <context:component-scan base-package="org.josescalia"/>
</beans>


Pada file Spring Configuration di atas kita bisa melihat bahwa Spring akan me-scan semua file yang ada dalam package org.josescalia yang aturannya adalah semua file yang kita kehendaki untuk di scan oleh Spring harus kita berikan konfigurasi annotation . Oleh karena itu maka hal selanjutnya yang akan kita lakukan adalah memberikan anotasi pada dua form yaitu pada Form1 dan Form2 yang sudah kita buat sebelumnya. Berikut ini anotasi pada salah satu form tersebut:

@Component
@Scope("prototype")
public class Form1 extends javax.swing.JPanel {
   ......
}

Kita menggunakan anotasi scope=prototype pada kode diatas dengan tujuan Spring akan menginstansiasi object Form1 setiap kali object tersebut di-request, memang masih ada anotasi lain seperti singleton, request, session, globalsession, untuk 3 scope terakhir akan bisa digunakan jika kita menggunakan aplikasi web. Sementara untuk scope singleton tujuannya adalah instansiasi satu object per-Spring IOC container. Untuk lebih jelas perbandingan keduanya referensi ini mungkin bisa membantu.

5. Langkah selanjutnya adalah memberikan sebuah prosedur pemanggilan form-form tersebut ketika menu-item pada form MainApp di klik. Berikut ini adalah salah satu potongan kode yang berfungsi memanggil form yang sudah kita berikan anotasi.

......    
    public static ApplicationContext ctx;
    /**
     * Creates new form MainApp
     */
    public MainApp() {
          //initial SpringConfigurationFiles
        ctx = new ClassPathXmlApplicationContext("appContext.xml"); 
        initComponents();
    }
    private void mnForm1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
        Form1 frm = ctx.getBean(Form1.class);
        frm.showForm();
        this.setContentPane(frm);
        this.validate();
    }
.......  

Pada kode diatas kita menginstansiasi variabel ctx dengan memanggil file appContext.xml dimana variabel ctx ini merupakan object dari ApplicationContext milik Spring Framework. Kemudian pada method mnForm1ActionPerformed, variabel frm kita deklarasikan sebagai Form1 dan kemudian kita intansiasi object-nya dengan memanggil kelas tersebut dari file Spring Configuration. Oleh karena pada file konfigurasi Spring sudah kita berikan kemampuan annotation-config, maka seharusnya Form1 akan ter-instansiasi. Dan baris kode selanjutnya adalah bagaimana kita membuat Form1 tersebut menyatu dengan form MainApp.

Dengan 5 langkah tersebut kita telah mengimplementasikan penggunaan Spring Framework dengan Swing Framework. Hal-hal yang selanjutnya bisa kita lakukan adalah mengoptimasikan penggunaan Spring Framework dalam konteks ini dengan menambahkan struktur back-bone aplikasi ke dalamnya, dimana pemanggilan data dari GUI ke back-bone aplikasi tersebut juga menggunakan Spring Framework.
Link berikut ini adalah contoh lengkap source-code percobaan kita diatas dan saya juga menambahkan sedikit contoh back-bone

Semoga bermanfaat

Menteng, 20 November 2012


Josescalia

 

No comments: