Sorry telat, biasa menjelang weekend, harus beres2 meja dulu :D
>>
>
> yah.. ini mah ada juga di spring. bikin annotation baru yg di-annotate
> dengan @Composite. nanti otomatis annotation itu bisa dipake buat
> annotate object yg mau di-manage oleh spring.
>
Wah gw cari di reference spring, @Composite maksudnya @Component ya.
Beda maksudnya @Component itu maksudnya mendeklarsikan bahwa object
kita diregistrasikan di bean mapping. Tapi BindingType di webbeans,
artinya kita membinding dan mereference object dengan annotation
tersebut.
>>> lah.. ini mah sama aja kaya panggil factory bean kan? ini mah cara
>>> dobo. masa buat hal yg simple musti bikin class factory tambahan. cape
>>> deh...
>>
>> Weits jangan salah, Spring membuat kita berfikir context context
>> context, jadi kita mikir buat class factory, berfikir buat property
>> editor. Tapi di webbeans, semua object adalah webbeans, tidak ada yg
>> namanya factory2an, sebab setiap object webbeans, bisa menjadi factory
>> dari object baru :D ide ini belum ada di spring. Ini adalah gabungan
>> antara google guice dan ide seam.
>
> ya tetep aja namanya factory class kalo fungsinya untuk membuat
> instance dari sebuah object lain. ini bukan ga ada di spring. lu bisa
> instantiate bean dengan constructor, static factory method dan
> instance factory method.
Mungkin keliatan sama, tapi cara pandang webbeans berangkat bahwa
applikasi web itu tidak stateless, dan implementasi model driven
development di webbeans dapat diimplementasikan. Beda halnya seperti
spring semua applikasi sifatnya ke stateless. Maksud gw seperti ini
(contoh ini pernah ditanyakan temen gw temen jug juga ;)
Misalkan gw punya kelas CurrencyConverter
CurrencyConverter{
private String rupiahTo;
private Double origin ;
private Double factor;
public int result(){
return origin * factor;
}
}
Nah gw punya Barang,
Barang{
private String barangId;
private int jumlah;
private double harga;
public double hargaDalamRupiah(){
return jumlah * harga;
}
}
Nah sekarang gw mau inject nih currency converter origin dengah
hargaDalamRupiah jadi maksudnya gw bisa tau harga di mata uang asing
berapa.
Nah di webbeans gw bisa tambahin @Producer di method hargaDalamRupiah,
jadinya nanti harga dalam rupiah di inject otomatis kedalam origin.
Nah kita bisa buat annotation baru dengan nama misalnya @harga dan di
origin kita annotate dengan @harga. Atau kita bisa inject @Current di
origin jadi origin sepertin ini :
CurrencyConverter{
private String rupiahTo;
@Current
private Double origin ;
private Double factor;
public int result(){
return origin * factor;
}
}
nah kalau kita inject menggunakan @Current, nantinya webbeans akan
mencari dalam scope yg kecil ke besar (request, conversation sampai
application context) object mana yg tipe datanya memenuhi @Current.
Nah ini pengaruhnya luar biasa, ini baru namanya loosely coupled.
Antara CurrencyConverter, dan barang sama2 masing2 independent. Beda
dengan Spring, di spring hal ini tidak mudah dilakukan.Menginject
sebuah bean dari hasil method. Ini artinya kita juga bisa
mengembalikan object jpa langsung di inject ke kelas yg membutuhkan
object tersebut. Ini benar2 clean code ! ini benar2 object oriented.
Webbeans meng-encourage user untuk membangun aplikasi object oriented
dengan loosely coupled. Tidak seperti spring yg men-drag user untuk
membuat aplikasi "Anemic Domain Model"
http://en.wikipedia.org/wiki/Anemic_Domain_Model
coba aja kalau bikin aplikasi di spring, pasti udah kepikiran
wah elu musti buat controllernya, terus musti buat facadenya buat
ngitung CurrencyConverterManager, buat dao untuk nyimpen hasilinya.
..... gw musti registrasiin controller di servlet, context,
currencyConverterManager dan dao di application context xml.
Oops lupa CurrencyConverterManager di methodnya nanti passing
barangId, jumlah, dan currencyId, di manager load satu2, abis itu
dikali baru simpen. WHUAHAHAHAHAHAHAA. Di webbeans bisa simple kenapa
di Spring bisa jadi bludak ya codenya ???
INI KARENA SPRING EMANG SAMPAHHHH !!!!
Cheers !