Spring : Pengantar Praktis Inversion of Control (IoC) – Membuat sebuah Aplikasi Spring

Oleh : Reza Ervani

بسم الله الرحمن الرحيم

Rujukan : http://www.springbyexample.org/examples/intro-to-ioc.html

Spring dapat digunakan di aplikasi standar, aplikasi web, aplikasi full Java EE dan kontainer-kontainer lain. Satu-satunya kebutuhan adalah kita harus menjalankan JVM standar. Abstraksi resource Spring memperkenankan kita untuk memuat file-file konfigurasi dari mana saja kita inginkan — classpath, sistem file, FTP atau lokasi HTTP. Kita juga dapat menggunakan abstraksi resource Srping untuk memuat file-file lain yang dibutuhkan oleh aplikasi kita.

Sekali kontainer IoC diinisialisasi, kita dapat mengambil bean Spring kita. Dengan mendelegasikan sebanyak mungkin bean yang mungkin ke Spring, seharusnya hanya ada beberapa point kunci dimana kode aplikasi perlu secara langsung mengakses kontainer IoC, dan hal ini bisa berlaku bahkan untuk aplikasi turunan[Lihat Note Dibawah] . Jika kita mengembangkan aplikasi web, kita tidak perlu secara langsung mengakses kontainer IoC sama sekali dikarenakan hal tersebut akan secara otomatis ditangani oleh instansiasi dari kontroller kita dan semua bean yang dibutuhkannya.

Level terendah implementasi kontainer IoC adalah BeanFactory, tetapi direkomendasikan untuk menggunakan sebuah ApplicationContext di aplikasi kita. ApplicationContext adalah sebuah subclass dari interface BeanFactory, sehingga dia memiliki semua fungsionalitas yang dimiliki oleh BeanFactory disertai dengan tambahannya. Hingga kita menulis aplikasi yang membutuhkan suatu footprint memory yang sangat amat kecil, BeanFactory sebaiknya tidak digunakan secara langsung.

Ada beberapa perbedaan kecil implementasi ApplicationContext yang dapat digunakan, yang dapat dipelajari dengan membaca dokumentasi Framework Spring dan kode sumber. Untuk tujuan contoh, kita akan menggunakan satu yang paling populer yakni ClassPathXmlApplicationContext, yang merupakan default untuk membaca resource dari classpath. Jika kita memerlukan penggunaan suatu lokasi yang berbeda untuk class-class kita, kita dapat menambahkan prefix sebelum path file konfiguras seperti ‘file’, ‘http’ dll. Hal itu akan memaksa ApplicationContext untuk membaca dari suatu tempat bukan dari lokasi default.

Example 4. MessageRunner

Class berikut adalah aplikasi Java standar dengan metode main. Bari pertama dari metode main membuat suatu ClassPathXmlApplicationContext yang dilewatkan didalam ‘/application-context.xml’ ke konstruktornya yang memberikan ke interface ApplicationContext. Dalam kasus ini file konfigurasi berada di dalam root classpath. Metode getBean(String beanName) yang ada di ApplicationContext digunakan pada baris berikutnya untuk mengambil bean message dari kontainer IoC.

[code language=”java”]

public class MessageRunner {

final static Logger logger = LoggerFactory.getLogger(MessageRunner.class);

/**
* Main method.
*/
public static void main(String[] args) {
logger.info("Initializing Spring context.");

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/application-context.xml");

logger.info("Spring context initialized.");

Message message = (Message) applicationContext.getBean("message");

logger.debug("message=’" + message.getMessage() + "’");
}

}

[/code]

application-context.xml

[code language=”xml”]

<?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="message"
class="org.springbyexample.di.app.Message">
<property name="message" value="Spring is fun." />
</bean>

</beans>

[/code]

[Note] Instansiasi Spring di dalam aplikasi kita tidak melanggar aturan #1 dari Dependency Inversion (Baca : Konteks Spring : Konsep Inti) dikarenakan Spring akan menjadi dependency dengan level yang lebih tinggi.

About Reza Ervani 426 Articles
Adalah pendiri programming.rezaervani.com -

Be the first to comment

Leave a Reply

Your email address will not be published.


*


This site uses Akismet to reduce spam. Learn how your comment data is processed.