[ Pobierz całość w formacie PDF ]

może zawierać np. następujące zapisy:
dataSource.driverClassName=oracle.jdbc.driver.OracleDriver
dataSource.url=jdbc:oracle:thin:@db-server:1 21:devdb
dataSource.username=john
dataSource.password=password
W ten sposób można przykryć cztery właściwości komponentu rataSource. Wszelkie wła-
ściwości (wszystkich komponentów) w danym kontenerze, które nie zostały przykryte przez
nowe wartości przedstawionego pliku właściwości, utrzymają swoje dotychczasowe warto-
ści  albo te zdefiniowane w konfiguracji kontenera, albo wartości domyślne komponentu
(w przypadku braku odpowiednich zapisów w pliku konfiguracyjnym). Ponieważ sama
analiza konfiguracji kontenera nie pozwala określić, czy dana wartość zostanie przykryta
(dla pewności konieczne jest jeszcze przestudiowanie pliku właściwości), tego typu funk-
cjonalność należy wykorzystywać tylko w uzasadnionych przypadkach.
Postprocesor CustomEditorConfigurer
CustomPritorConfigurer jest postprocesorem fabryki komponentów, za pomocą którego
możemy rejestrować własne edytory właściwości (rozszerzenia klasy PropertyPritorSupport)
komponentów JavaBeans obsługujące konwersję wartości łańcuchowych na docelowe
wartości właściwości lub argumentów konstruktora (w konkretnym, często złożonym for-
macie obiektowym).
Tworzenie własnych edytorów właściwości
Częstym powodem stosowania własnych, niestandardowych edytorów właściwości jest ko-
nieczność ustawiania właściwości typu java.util.Date, których wartości zródłowe zapisa-
no w postaci łańcuchów. Ponieważ formaty dat bardzo często są uzależnione od ustawień
regionalnych, użycie egzemplarza PropertyPritor eksportującego określony format łańcu-
cha zródłowego jest najprostszym sposobem radzenia sobie z problemem niezgodności
formatów. Ponieważ utrudnienia związane z formatami dat dotyczą większości użytkowni-
ków, zamiast prezentować jakiś abstrakcyjny przykład, posłużymy się klasą CustomDate-
Pritor (implementacją PropertyPritor dla typu Date)  przeanalizujemy nie tylko kod tej
klasy, ale także techniki jej rejestrowania i wykorzystywania w praktyce. Własne edytory
właściwości powinny być implementowane i rejestrowane w bardzo podobny sposób:
public class CustomDateEditor extends PropertyEditorSupport {
private final DateFormat dateFormat;
private final boolean allowEmpty;

Rozdział 2. Fabryka komponentów i kontekst aplikacji 131
public CustomDateEditor(DateFormat dateFormat, boolean allowEmpty) {
this.dateFormat = dateFormat;
this.allowEmpty = allowEmpty;
}
public void setAsText(String text) throws IllegalArgumentException {
if (this.allowEmpty && !StringUtils.hasText(text)) {
// traktuje pusty łańcuch jak wartość null
setValue(null);
}
else {
try {
setValue(this.dateFormat.parse(text));
}
catch (ParseException ex) {
throw new IllegalArgumentException("Konwersja daty nie powiodła się: " +
ex.getMessage());
}
}
}
public String getAsText() {
return (getValue() == null ? "" : this.dateFormat.format((Date)getValue()));
}
}
Pełna dokumentacja tej klasy w formacie JavaDoc jest dołączana do wersji instalacyjnej
Springa. Implementację własnego edytora właściwości najlepiej rozpocząć od rozszerzenia
pomocniczej klasy bazowej java.beans.PropertyPritorSupport będącej częścią standar-
dowej biblioteki klas Javy. Wspomniana klasa implementuje większość potrzebnych me-
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- [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • metta16.htw.pl
  •