[ Pobierz całość w formacie PDF ]

chanizmów edycji właściwości (także poza standardowymi metodami setAsText() i getAs-
Text(), których implementacje zawsze musimy przykrywać). Warto pamiętać, że chociaż
egzemplarze PropertyPritor mają swój stan i w normalnych warunkach nie gwarantują
bezpieczeństwa przetwarzania wielowątkowego, sam Spring zapewnia odpowiednie me-
chanizmy synchronizacji całej sekwencji wywołań metod niezbędnych do prawidłowego
przeprowadzania konwersji.
CustomDatePritor może korzystać z dowolnej (przekazywanej za pośrednictwem argumentu
jej konstruktora) implementacji interfejsu java.text.DateFormat do przeprowadzania wła-
ściwej implementacji. Wdrażając klasę CustomDatePritor, możesz użyć implementacji
java.text.SimpleDateFormat. Nasz edytor właściwości można też skonfigurować w taki spo-
sób, aby łańcuchy puste albo interpretował jak wartości null, albo traktował jak błąd nie-
prawidłowego argumentu.
Rejestrowanie i używanie własnych, niestandardowych edytorów właściwości
Przyjrzyjmy się teraz definicji kontekstu aplikacji, w której użyto postprocesora CustomP-
ritorConfigurer do zarejestrowania edytora CustomDatePritor (implementacji uniwersal-
nego edytora PropertyPritor), którego zadaniem jest konwersja łańcuchów znakowych na
obiekty klasy java.util.Date. Definicja konfiguracji zawiera konkretny format łańcuchów
reprezentujÄ…cych daty:
132 Spring Framework. Profesjonalne tworzenie oprogramowania w Javie
class="org.springframework.beans.factory.config.CustomEditorConfigurer"
Postprocesor CustomPritorConfigurer może rejestrować jeden lub wiele niestandardowych
edytorów właściwości (choć w prezentowanym przykładzie ograniczymy się do jednego,
CustomDatePritor). Twoje edytory (zaimplementowane z myślą o innych typach) mogą nie
wymagać żadnych specjalnych zabiegów konfiguracyjnych. Z powyższego kodu konfigu-
racji wynika, że klasa CustomDatePritor, której konstruktor pobiera na wejściu dwa argu-
menty, otrzyma obiekt klasy SimpleDateFormat reprezentujący łańcuch formatu daty oraz
wartość logiczną (typu boolean) określającą, czy łańcuchy puste powinny być traktowane
jak wartości null.
Przedstawiony przykład ilustruje też wygodny sposób definiowania komponentu testowego
(w tym przypadku nazwanego testBean), który zawiera dwie właściwości typu Date usta-
wiane za pośrednictwem wartości łańcuchowych  w ten sposób sprawdzamy, czy nasz
edytor właściwości działa prawidłowo.
Postprocesor BeanNameAutoProxyCreator
BeanNameAutoProxyCreator jest postprocesorem komponentów. Co prawda techniki korzy-
stania z tego postprocesora omówimy bardziej szczegółowo w rozdziale poświęconym pro-
gramowaniu aspektowemu, jednak już teraz dobrze jest wiedzieć o jego istnieniu. Najkrócej
mówiąc, dla danej na wejściu listy nazw komponentów postprocesor BeanNameAutoProxy-
Creator może opakować te spośród otrzymanych komponentów danej fabryki, których na-
zwy pasują do nazw znajdujących się na tej liście (proces opakowywania następuje w cza-
sie tworzenia egzemplarzy komponentów, a zadaniem obiektów pośredniczących jest albo
przechwytywanie operacji dostępu do oryginalnych komponentów, albo modyfikowanie
ich zachowań).

Rozdział 2. Fabryka komponentów i kontekst aplikacji 133
Postprocesor DefaultAdvisorAutoProxyCreator
Ten postprocesor komponentów przypomina opisany przed chwilą postprocesor BeanName-
AutoProxyCreator, jednak oprócz samych nazw komponentów przeznaczonych do opako-
wania odnajduje też informacje na temat sposobu tego opakowania (tzw. porady). Także w tym
przypadku warto się zapoznać z treścią rozdziału poświęconego technikom programowania
aspektowego (AOP).
Po przeczytaniu tego rozdziału powinieneś znacznie lepiej rozumieć, co tak naprawdę
oznaczają takie pojęcia jak odwracanie kontroli i wstrzykiwanie zależności oraz jak obie
koncepcje zostały urzeczywistnione w postaci fabryk komponentów i kontekstów aplikacji
Springa. Przeanalizowaliśmy i użyliśmy większości podstawowych elementów funkcjonal-
ności kontenera Springa. Ponieważ właśnie kontener IoC jest podstawą pozostałych me-
chanizmów Springa, dobre rozumienie sposobu jego funkcjonowania i technik konfiguracji
w połączeniu ze świadomością potencjału tego kontenera jest kluczem do efektywnego ko-
rzystania ze Springa.
Dowiedziałeś się między innymi:
Jak dzięki funkcjom kontenera można korzystać z zalet jednego, logicznie spójnego
i przewidywalnego mechanizmu dostępu, konfigurowania i wiązania obiektów
(zamiast używać programowych lub tworzonych naprędce mechanizmów łączenia
klas, które tylko utrudniają testowanie). Ogólnie, kontener pozwala całkowicie
wyeliminować konieczność korzystania z niestandardowych, przystosowanych
do konkretnych klas fabryk komponentów oraz singletonów.
Jak kontener wspiera programistę w stosowaniu pożądanej praktyki oddzielania
interfejsu od implementacji w kodzie aplikacji.
%7łe postprocesory oferują możliwość elastycznego dostosowywania zachowania
komponentów i kontenera (za pomocą odpowiednich plików zewnętrznych).
Jakie są podstawowe reguły odwracania kontroli i jak w połączeniu z fabryką
komponentów tworzą doskonałe narzędzie do budowy abstrakcji ponad operacjami
wymagającymi dostępu do usług i zasobów.
%7łe technika IoC wraz z odpowiednim kontenerem może stanowić solidną podstawę
dla budowy aplikacji w oparciu o framework Spring bez konieczności tworzenia
ścisłych związków pomiędzy konstruowanym oprogramowaniem a samym kontenerem.
W następnym rozdziale skupimy się na bardziej zaawansowanych mechanizmach kontekstu
aplikacji i przedstawimy kilka zaawansowanych scenariuszy użycia kontenera. [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • sliwowica.opx.pl
  •