Spring - Pendahuluan

Spring Framework merupakan salah satu framework untuk Java.

Secara de Facto merupakan framework yang paling banyak digunakan sebagai dasar pembuatan aplikasi web berbasis Java.

Dengan konsep “Dependency Injection” sebagai implementasi dari “Inversion of Control”, maka aplikasi yang dibuat dengan Spring bisa dengan mudah dikonfigurasi dan dijalankan secara modular.

Begitu pula dengan dibuatnya framework pembungkus diatas framework Spring, yaitu framework Spring Boot, maka lengkaplah sudah Spring sebagai pemain utama di framework Java.

Didalamnya juga disediakan Annotation yaitu seperti atau mirip-mirip dengan Tag untuk sebuah class, method, konfigurasi, dll.

Misalnya :

import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.SpringBootApplication;  

@SpringBootApplication
class AplikasiSpring {

    public static void main(String[] args) {
        SpringApplication.run(AplikasiSpring.class, args);
    }
}

atau

@Service
class VehicleService {

}

atau

@Configuration
class VehicleConfiguration {

    @Bean
    public RestTemplate restTemplate() {
      ,,,,
    }
}

Kalau kita lihat diatas, ada 4 Anotasi yang kita temui :

  • @SpringBootApplication
  • @Service
  • @Configuration
  • @Bean

Keempat Anotasi tersebut merupakan metadata yang merupakan tambahan dari code yang sudah ada di sebuah class atau method.

Misalnya dari contoh diatas :

  • @SpringBootApplication –> menginformasikan bahwa class yang di-anotasikan adalah class utama dari aplikasi.
  • @Service –> menginformasikan bahwa class tersebut merupakan class di level Service layer.
  • @Configuration –> menginformasikan bahwa class tersebut merupakan class Konfigurasi.
  • @Bean –> menginformasikan bahwa class tersebut merupakan class Bean yang akan diinject ke dalam IoC container..

Salah satu jenis Annotation di Spring dinamakan Spring Stereotype Annotation.

Jenis Anotasi ini digunakan untuk membuat Spring Beans secara otomatis.


Apa saja itu Spring Stereotype Annotation ?


Anotasi yang paling umum dari Spring Stereotype Annotation ini adalah :

@Component

Kemudian ada beberapa Spring Stereotype Annotation yang merupakan turunan dari @Component ini , yaitu :

@Service
@Repository
@Controller

Kita coba lihat satu persatu :


1. @Component

Anotasi @Component selalu ditempatkan sebagai anotasi untuk sebuah class.

Sesuai namanya, Anotasi ini mencerminkan bahwa class tersebut dianggap sebagai Component.

Component artinya disini adalah class ini merupakan class yang akan diinisiasi, diinject dan dikelola oleh Spring Framework di dalam IoC Container/ Spring Container sebagai namanya Spring’s managed component.

Anotasi ini merupakan anotasi umum yang bisa saja melakukan code berbeda tergantung isi dari logic class nya.


2. @Service

Anotasi ini menginformasikan bahwa class yang memakai anotasi ini merupakan layer Service yang berisikan business logic.

Didalamnya berisikan banyak code, flow atau kondisi yang mencerminkan proses bisnis di aplikasi kita.


3. @Repository

Lain halnya dengan @Repository. Anotasi ini mengindikasikan bahwa class tersebut berhubungan dengan operasi penyimpanan, pengubahan, penghapusan Data ke sebuah tempat.

Misalkan ke dan dari :

  • Database
  • Elastic Search
  • LDAP
  • Redis
  • Hadoop
  • Geode
  • dll

Yang paling sering kita gunakan biasanya untuk operasi CRUD (Create, Read, Update, Delete) ke table Database Relasional atau Database NoSQL.

Boleh dibilang @Repository ini berada di level DAO (Data Access Object).


4. @Controller

Anotasi @Controller ini mengindikasikan bahwa class tersebut berhubungan dengan Request pengguna.

Tentunya nantinya kembalian dari @Controller ini adalah dalam bentuk response yang sesuai.

Anotasi ini menunjukkan bahwa class ini berada di layer Controller dalam pattern MVC (Model View Controller).

  • Model mengacu kepada layer Data/Repository yang kita punya.
  • View mengacu kepada tampilan FrontEnd yang pengguna berinteraksi langsung dengannya.
  • Controlle sebagai penghubung antara View dan Model diatas.

Layer Controller ini menerima request pengguna, melakukan handling terhadap request tersebut, dan mengembalikan response yang sesuai dengan yang diproses.

Ada lagi Anotasi yang khusus ketika menggunakan class Controller ini untuk menangani request dalam bentuk REST.

Yaitu @RestController.

Di dalam arsitektur microservice menggunakan Spring Boot, kita akan banyak menggunakan anotasi @RestController diatas di layer controller kita.


Apakah kita bisa mempertukarkan Anotasi diatas ?

Misalkan kita mau menjadikan semua class kita dengan anotasi @Component saja ?

Apakah mungkin ?

Mungkin saja.

Ke empat Anotasi diatas secara logic code bisa dipertukarkan, karena tidak ada perlakuan khusus untuk tiap-tiap anotasinya.

@Controller, @Repository, @Service merupakan turunan dari Anotasi @Component, dan tidak ada yang khusus atau tambahan code untuk masing-masing nya.

Penamaan dan pemilihan Anotasi yang sesuai dari ke 4 Anotasi diatas lebih kepada Semantik dari komponen yang ada di dalam aplikasi kita.

Apakah dia itu :

  • sebagai penghubung antara request user ke aplikasi kita, gunakan @Controller.
  • berisi business logic dari aplikasi kita, gunakan @Service
  • berisi akses ke data di aplikasi kita, gunakan @Repository.
  • Komponen lain yang tidak bisa digolongkan kepada 3 case diatas, gunakan @Component.

Sekiaan..