Wpis z mikrobloga

#java #programowanie #spring
Mireczki, jakiś czas temu przygotowałem małą prezentację dla zespołu o tym jak działa Spring pod spodem, czym jest proxy, jak zaimplementować @Autowired, @Transactiona itp. Zrobiłem to, ponieważ czesto widziałem błędy, że "@Transactional nagle przestaje działać i dzieje sią jakaś magia". Postanowiłem się zebrać to wszystko w jednym i stworzyłem repozytorium,

Opisałem krok po kroku jak zaimplementować taki framework:
- jak zaimplementować dependency injection
- czym jest proxy
- jak stworzyć i użyć własnych adnotacje
- co i dlaczego jest potrzebne, aby adnotacje e proxy działały

Każdy package zawiera krok, który opisany jest w readme. Jeżeli chcecie zobaczyć tylko działajacy framework to zapraszam do kroku 7

Link do repo: https://github.com/Patresss/Java-Own-Framework---step-by-step

Jeżeli macie jakieś uwagi/pytania/sugestie to dajcie znać!

  • 16
@Patres: Dzięki za materiał, sporo wyjaśnił :)
Nasunęło mi się kilka pytań, może znałbyś odpowiedź.
1. Czy proxy w springu tworzone jest dla każdego beana? Jeśli nie to jak sprawdzić czy dana klasa ma utworzone proxy przez springa? O co mi chodzi? Otóż stworzyłem sobie dwa beany, do pierwszego wstrzyknąłem drugi i podczas debugu nie miałem ozaczenia w stylu MyClass$$EnhancerBySpringCGLIB, a używam spring boota 2.5
2. Pytanie do kroku 2, ponieważ
@Stanislavv
1. Prozy jest tworzone kiedy hets to wymagane. Np bawiłem się w Springu i też zauważyłem że mój jeden bean nie był proxy. Jednak gdy dodałem @Cachable to proxy się utworzyło bo był do tego powód (obsługa cache)
2. Intellij Cię ostrzeże przed takimi rzeczami. I tak w finał nie zadziała - zignoruje adnotacje
3. Wynika to z tego że dynamic proxy działa na interface, a interface ma publiczne metody. Aby
@Stanislavv co do 3 to dodatkowo musi być to publiczna metoda, bo innej nie można zawołaćbjej w nie swoim beanie. Jak wspominałem, aby adnotacją działała musi przejść przez proxy. Czyli być wywołana z innego miejsca (nie w tym samym beanie). Nie można tego zrobić gdy metoda jest prywatna
@Stanislavv jeszcze jedno co do 3. Sam się o tym przekonasz jak pobierzesz moje repo i zmienisz metodę na prywatną. W debugu wszystko zobaczyć (albo nawet bez debugo, bo możesz nie uruchomisz takiego kodu) ;)