A.
APA ITU SPRING FRAMEWORK?
Spring merupakan framework IoC (Injection of Control) atau disebut juga Dependency Injection (DI), yaitu suatu mekanisme dimana tidak diperlukannya suatu
pendeklarasian object untuk mendapatkan object tersebut. Hal ini dikarenakan
object tersebut akan secara otomatis di instansi atau diinject oleh spring.
Spring dapat digunakan untuk
melakukan pengaturan deklarasi manajemen transaksi, remote access dengan
menggunakan RMI atau layanan web lainnya, fasilitas mailing, dan beragam opsi
untuk pengaturan data ke database. Spring juga memungkinkan kita menggunakan
hanya modul-modul tertentu sehingga kita tidak usah menggunakan semua modul
spring dalam aplikasi apabila tidak diperlukan
Fitur-fitur dari Spring Framework :
- Transaction Management : Spring framework menyediakan
sebuah layer abstrak yang generik untuk manajemen transaksi, sehingga
memudahkan para developer dalam melakukan manajemen transaksi.
- JDBC Exception Handling : layer abstrak JDBC menawarkan
exception yang bersifat hierarki sehingga memudahkan penanganan error.
- Integration with Hibernate, JDO, and iBatis : Spring
menawarkan layanan integrasi terbaik dengan Hibernate, JDO dan iBatas
- AOP Framework : Spring merupakan framework AOP Terbaik
yang pernah ada.
- MVC Framework : Spring hadir dengan framework aplikasi
web MVC, yang dibangun di atas inti Spring. Spring merupakan framework
yang sangat fleksibel dalam pengaturan strategi interface, dan
mengakomodasi beberapa teknologi view seperti JSP, Velocity, Tiles, iText,
dan POI.
Arsitektur Spring :
1. Spring AOP Salah satu komponen utama
Spring adalah AOP Framework, AOP framework digunakan untuk :
- Untuk
menyediakan layanan Enterprise, terutama sebagai pengganti EJB. Layanan
terpenting dalam layanan ini adalah untuk mendekralitf manajemen
transaksi, yang telah disediakan dalam abstraksi spring transaction.
- Untuk
memungkinkan pengguna dalam menerapkan AOP dalam penggunaan OOP.
2. Spring ORM
Spring
ORM berhubungan dengan akses database dan menyediakan lapisan layer
terintegrasi dengan ORM yang populer termasuk JDO, Hibernate dan iBatis.
3. Spring Web
Merupakan
bagian dari modul pengembangan Web Spring termasuk Spring Web MVC.
4. Spring DAO
DAO
(Data Access Object) mendukung standarisasi akses data yang menggunakan
teknologi seperti JDBC, Hibernate dan JDO.
5. Spring Context
Paket
ini didasari pada paket beans untuk menambah dukungan sumber pesan dan untuk
pola desain Observer, dan kemampuan untuk mendapatkan sumber daya yang
konsisten dengan menggunakan API.
6. Spring Web MVC
Menyediakan
implementasi MVC untuk aplikasi web.
7. Spring Core
Paket
Spring Core ini merupakan komponen paling penting dari Spring Framework.
Komponen ini menyediakan fitur Dependency Injection. BeanFactory memisahkan
dependensi seperti inisialisasi, pembentukan dan akses object dari logika
program anda.
Diagram Berikut menggambarkan
arsitektur dari Spring :
Contoh Studi Kasus:
Ada
sebuah class Person.
package com.example.beans;
public class Person {
private
int umur;
return
nama;
}
public
void setNama(String nama) {
this.nama
= nama;
}
public
int getUmur() {
return
umur;
}
public
void setUmur(int umur) {
this.umur
= umur;
}
@Override
return
String.format("Nama: %s\n" +
"Umur:
%d\n",
this.nama,
this.umur);
}
}
Kemudian
buat file context.xml untuk inisialisasi object
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
class="com.examlple.beans.Person"
p:nama = "Hasan"
p:umur
= "20" />
Lalu
panggil dengan menggunakan main class.
package com.example.main;
import
org.springframework.beans.factory.xml.XmlBeanFactory;
import
org.springframework.core.io.ClassPathResource;
import com.example.beans.Person;
public class mainPerson {
/**
* @param args
*/
public
static void main(String[] args) {
XmlBeanFactory beanFactory = new
XmlBeanFactory(new ClassPathResource("context.xml"));
Person demo = (Person)
beanFactory.getBean("mybean");
}
}
Jika
aplikasi dijalankan, maka hasilnya seperti berikut:
Jika kita tidak
menggunakan Spring, Ketika Main Class dijalankan akan terdapat error karena
Object Person belum di-inisialisasi. Cara di atas disebut dengan manual
injection. Untuk Spring yang terbaru menggunakan cara Annotation.
B.
ARSITEKTUR SPRING FRAMEWORK
Di dalam Spring Framework terdapat
20 modul. Modul-modul tersebut dikelompokkan menjadi beberapa group antara lain
:
a.
Core Container
b.
Data Access/Integration
c.
Web
d.
AOP (Aspect Oriented Programming)
e.
Instrumentation, dan
f.
Test
Berikut ini adalah penjelasan untuk
tiap modul
·
Spring Core dan Spring Beans.
Merupakan komponen paling penting
dari Spring Framework. Komponen ini menyediakan fitur Dependency Injection.
BeanFactory memisahkan dependensi seperti inisialisasi, pembentukan dan akses
object dari logika program anda.
·
Spring Context.
Paket
ini didasari pada paket beans untuk menambah dukungan sumber pesan dan untuk
pola desain Observer, dan kemampuan untuk mendapatkan sumber daya yang konsisten
dengan menggunakan API
·
Spring Expression Language (SpEL).
SpEL menyediakan Expression
Language yang powerfull untuk query dan manipulasi grafik objek pada saat
runtime.
·
JDBC.
Spring JDBC memberikan lapisan JDBC
abstrak yang menghilangkan kebutuhan untuk melakukan coding JDBC yang
membosankan.
·
Spring ORM.
Spring ORM berhubungan dengan akses
database dan menyediakan lapisan layer terintegrasi dengan ORM yang populer
termasuk JDO, Hibernate dan iBatis.
·
Spring OXM.
Spring OXM berhubungan dengan Object/XML
Mapping implementasi dari JAXB, Castor, XMLBeans, JiBX dan XStream.
·
Spring JMS (Java Messaging
Services)
Berisi fitur-fitur yang berhubungan
dengan Message Java.
·
Spring Web.
Modul Web Spring's menyediakan
fitur integrasi dasar web-oriented seperti multi-file upload dan inisialisasi
IOC menggunakan listener servlet dan konteks aplikasi web-oriented.
·
Spring Web Servlet
Spring Web Servlet berisi
implementasi MVC pada web aplikasi.
·
Spring Web Portlet
Spring Web Portlet berisi
implementasi MVC pada web aplikasi untuk Portlet
·
Spring Web Struts
Merupakan integrasi dengan
Framework Struts
·
Spring AOP
Mengimplementasikan pemrograman
berorientasi Aspect.
·
Spring Test
Berhubungan dengan testing
Component dengan JUnit atau TestNG.
C.
SPRING
WEB MVC
Dari keterangan sebelumnya,
Spring Web MVC merupakan bagian dari modul Spring Web Servlet yang ada pada
Spring Framework. Sehingga masih memiliki sifat-sifat yang sama dengan Spring
Framework.
D.
CARA
KERJA SPRING WEB MVC
a. DispatcherServlet
Kerangka Spring
Web model-view-controller (MVC) dirancang di sebuah DispatcherServlet. DispatcherServlet
adalah suatu class di dalam Spring yang berfungsi untuk menangani
permintaan yang didasarkan pada pengaturan di file xml. Jadi, DispatcherServlet
adalah class yang mengatur jalannya permintaan dan keluaran. Diagram di bawah
ini menunjukkan bagaimana alur kerja dari DispatcherServlet, yang merupakan
sebuah ekspresi dari pola FrontController.
Process Jalannya
Request pada Spring Web MVC DispatcherServlet
DispatcherServlet
di dalam file web.xml, yang di dalamnya juga ditambahkan URL Mapping yang akan
di handle oleh DispatcherServlet.
b.
Spring
IoC Container
Selain DispatcherServlet dan Mapping
request, di dalam web.xml juga terdapat letak Spring IoC Container. Spring IoC
Container adalah jantung dari Aplikasi Spring. Yaitu sebuah file
konfigurasi untuk memanage object-object yang ada di dalam aplikasi.
Spring IoC Container
bisa menggunakan 2 cara, yaitu beans dan context. Untuk Spring Web MVC, setiap DispatcherServlet
sebenarnya sudah memiliki WebApplicationContext sesuai dengan
servlet-name yang di inisialisasi, yaitu -context.xml.
Namun, kita juga bisa menggunakan nama lain, akan tetapi harus dituliskan pada
web.xml seperti contoh di bawah ini.
appServlet
org.springframework.web.servlet.DispatcherServlet
/WEB-INF/spring/appServlet/servlet-context.xml
1
appServlet
/
Special beans di dalam WebApplicationContext
Type
Bean
|
Explanation
|
controllers
|
Form
the C part of the MVC.
|
handler
mappings
|
Handle
the execution of a list of pre-processors and post-processors and controllers
that will be executed if they match certain criteria (for example, a matching
URL specified with the controller).
|
view
resolvers
|
Resolves
view names to views.
|
locale
resolver
|
A
locale resolver is a component capable of resolving the locale a client is
using, in order to be able to offer internationalized views
|
Theme
resolver
|
A
theme resolver is capable of resolving themes your web application can use,
for example, to offer personalized layouts
|
multipart
file resolver
|
Contains
functionality to process file uploads from HTML forms.
|
handler
exception resolvers
|
Contains
functionality to map exceptions to views or implement other more complex
exception handling code.
|
Contoh
WebApplication Context.
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
E. IMPLEMENTASI PADA OBJECT
Implementasi IoC pada Spring Web
MVC menggunakan metode Annotation. Annotation yang dimaksud seperti
@RequestMapping, @RequestParam, @ModelAttribute, dan lainnya. Berikut contoh
penggunaan Annotation
package
org.springframework.samples.mvc.mapping;
import
org.springframework.stereotype.Controller;
import
org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RequestMethod;
import
org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class
MappingController {
@RequestMapping("/mapping/path")
public @ResponseBody
String byPath() {
return "Mapped
by path!";
}
@RequestMapping(value="/mapping/method",
method=RequestMethod.GET)
public @ResponseBody
String byMethod() {
return "Mapped
by path + method";
}
@RequestMapping(value="/mapping/parameter",
method=RequestMethod.GET, params="foo")
public @ResponseBody
String byParameter() {
return "Mapped
by path + method + presence of query parameter!";
}
@RequestMapping(value="/mapping/parameter",
method=RequestMethod.GET, params="!foo")
public @ResponseBody
String byParameterNegation() {
return "Mapped
by path + method + not presence of query parameter!";
}
@RequestMapping(value="/mapping/header",
method=RequestMethod.GET, headers="Accept=text/plain")
public @ResponseBody
String byHeader() {
return "Mapped
by path + method + presence of header!";
}
@RequestMapping(value="/notheader",
method=RequestMethod.GET, headers="!FooHeader")
public @ResponseBody
String byHeaderNegation() {
return "Mapped
by path + method + not presence header!";
}
@RequestMapping(value="/mapping/*",
method=RequestMethod.GET)
public @ResponseBody
String regexp() {
return "Mapped
by regexp!";
}
}
0 comments