Wpis z mikrobloga

Zainspirowany tym wpisem postanowiłem w ramach #naukaprogramowania i rozwoju #odzeradodevelopera napisać własny, minimalistyczny framework DI.

Inspiracją techniczną było to narzędzie: TinyDi oraz Guice.

- Co udało mi się zrobić:
1. mapowanie interfejsów na implementacje, w tym interfejsów z generic parameters
2. singletony (jak wyżej)
3. mapowanie danego interfejsu na klasę implementaującą java.funtion.Supplier

- Co chciałbym jeszcze na pewno zrobić (kolejność przypadkowa):
- dodać rozsądne zarządzanie wyjątkami i czytelne komunikaty dla użtykownika API (np. gdy instancjowana klasa nie ma odpowiedniego konstruktora itp.)
- organiczyć rozmiar jaru (teraz ładowany jest cały guava-collections ze względu na klasę Multimap).
- dodać możliwość mapowania parametryzowalnego interfasju na klasę implementującą Supplier.
- wytestować wszystko możliwie jak najdokładniej :-))
- dopisać na GitHubie podstawową dokumentację i przykłady użycia.

Zdecydowałem, że DI będzie odbywać się wyłacznie przez konstruktor. Z tego też powodu framework nie pozwala i otwarcie sprawdza, czy wśród mapowanych obiektów nie ma zależności cyklicznych - jeśli taka się znajdzie rzucany jest wyjątek CircularReferenceException.

Konstruktor, w który mają być wstrzyknięte zależności musi być opisany standardową annotacją javax.inject.Inject.

Wdzięczny będę niezwykle za wszelkie uwagi i podpowiedzi :-)

Cały kod dostępny jest na GitHubie.

  • 4
@kitke: Kiedyś pisałem swojego orm'a, bo hibernate wydawał mi się za ciężki. Muszę go wygrzebać z moich archiwów (github to chyba jeszcze nie istniał wtedy ;). Plusik za każdą taką inicjatywę (nawet jeśli nic większego z tego nie wyjdzie), ale wstrzykiwanie przynajmniej przez settery to Ty dodaj ( ͡° ͜ʖ ͡°)
@Legol: Mam to w planie, chciałem na początek puścić w świat działającą wersję z wstrzykiwaniem przez konstruktor, popatrzeć na odzew i dodawać kolejne elementy zależnie od czasu i reakcji.
@kitke: Fajny pomysł! :)
Mi na studiach kazano napisać aplikację w Servletach bez gotowych frameworków, to postanowiłem sobie napisać swoje MVC ( ͡ ͜ʖ ͡)
Nawet całkiem to zaczynało działać, ale ostatecznie zmienili zdanie i pozwolili skorzystać z JSF. Stwierdziłem, że warto jednak liznąć podstawy czegoś bardziej praktycznego.

Aczkolwiek fajna i kształcąca zabawa. Jeszcze do tego wrócę i skończę chociaż najważniejsze funkcjonalności :)

- organiczyć rozmiar