Spring logger service inne podejście
W poprzednim wpisie pokazałem jak napisać własny procesor adnotacji do Springa. W komentarzach Leszek Gawron stwierdził, że można by było automatycznie rozpoznawać typ loggera na podstawie typu pola. Tyle słuszne co do końca niewykonalne.
Po pierwsze dlatego, że Logger nie zawsze jest klasą. W przypadku commons-logging logger jest interfejsem. Po drugie dlatego, że logger nie zawsze jest możliwość stworzenia loggera za pomocą operatora new. Musi być tworzony czy to przez metodę fabrykującą czy to przez oddzielną klasę – fabrykę. Po trzecie mechanizm adnotacji nie pozwala na swobodne wykorzystanie wszystkich wartości. Wartość adnotacji jest ograniczona do typów prostych, String, Class i w dodatku musi być znana w momencie kompilacji! Mamy zatem dwa wyjścia. Podanie jako String nazwy klasy fabrykującej… co jest głupie ponieważ właśnie tego chcemy uniknąć. Wskazanie klasy adaptera, która wykona za nas czarną robotę. Co nadal nie jest najlepszym rozwiązaniem, ale w przeciwieństwie do enumów umożliwia rozszerzanie naszej fabryki o dowolny logger.
Wersja 0.2 w repo. Adnotacja ma teraz dwie metody. Pierwsza pozwala na podanie nazwy klasy adaptera jako String druga podanie klasy w prost. Pierwsza jest o tyle dobra, że nie musimy mieć w bieżącym classpath adaptera. Druga jest pewniejsza. Nie ma jeszcze walidacji, ale to dopiszę w wolnej chwili.