Sesuai janji saya di tulisan sebelumnya, Spring Reference Injection menggunakan xml kali ini saya akan memberikan contoh penggunaan spring reference injection menggunakan annotation.

Langsung saja ubah class RefClass menjadi seperti ini

package com.maniakjava.domain;

import org.springframework.stereotype.Component;

@Component
public class RefClass
{
    public void sayHello()
    {
        System.out.println("Hello World");
    }
} 

Lalu ubah class People menjadi seperti ini

package com.maniakjava.domain;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class People
{
    @Autowired
    private RefClass refClass;

    public RefClass getRefClass() {
        return refClass;
    }

    public void setRefClass(RefClass refClass) {
        this.refClass = refClass;
    }
}
 

Sekarang ubah people-context.xml menjadi seperti ini

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<context:annotation-config/>
<context:component-scan base-package="com.maniakjava" />

</beans> 

Code di atas berfungsi untuk memberitahu spring untuk melakukan scan terhadap annotation yang berada di package com.maniakjava . Jadi kita tidak perlu repot2 menulis satu persatu deklarasi bean di file xml.
Lalu untuk class Main nya menjadi seperti ini

package com.maniakjava.main;

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

public class Main
{
    public static void main(String[] args)
    {
       BeanFactory beanfactory = new ClassPathXmlApplicationContext(
	                "/com/maniakjava/config/people-context.xml");
       People people = (People)  beanfactory.getBean("people");
       people.getRefClass().sayHello();
    }
}
  

Sekarang kalian tinggal jalankan kembali class Main di atas.

Perhatikan, annotation @Component itu fungsinya untuk mendeklarasikan suatu bean, kalau di xml identik dengan <bean id=”xxx” />.

Sebagai informasi annotation @Component itu bisa kalian ganti dengan @Service, @Controller , @Repository, atau @Configuration. Untuk kasus kali ini, semuanya berfungsi sama. Namun sebenarnya kelima annotation tersebut memiliki fungsinya masing2. Untuk perbedaan detailnya bisa dibaca di dokumentasi dari spring.

Lalu bila kita menggunakan annotation @Component di suatu class, maka saat kita hendak menggunakan bean yang bertipe class tersebut, nama beannya berpola : huruf pertama nama class merupakan huruf kecil, kemudian untuk kata berikutnya mengikuti nama class(Jika kata kedua nama class nya huruf besar, maka nama beannya juga huruf besar, demikian pula untuk huruf kecil). Sebagai contoh pada class People, maka nama beannya akan menjadi people. Dan pada class RefClass, nama beannya akan menjadi refClass.

Selain itu bila kita tidak ingin menggunakan nama bean default saat menggunakan @Component, kita bisa mendeklarasikan nama bean sesuka hati kita. Caranya dengan menngubah code @Component menjadi @Component(“beanPeople”).

Sedangkan @Autowired itu berfungsi untuk mereferensikan suatu bean, kalau di xml identik dengan <property name=”xxx” ref=”yyy” />. Sekarang cobalah kalian hapus @Autowired tersebut dan jalankan class Main. Maka kalian akan mendapat pesan error : Exception in thread “main” java.lang.NullPointerException. Ya ini terjadi karena kita belum membuat object dari class RefClass, kalau di program Java biasa, biasanya kan kita menggunakan private RefClass refClass = new RefClass();

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