Podejście nr 1:
Jednym ze sposobów jest stworzenie aspekcie z wyrażeniem punkt-cut, który pasuje dowolną metodę mającą tej adnotacji.
Twój aspekt będzie wtedy:
- Odczytać wartość nieruchomości w adnotacji
- Spójrz wymaganą wartość jest wstrzyknąć do klasy.
AOP Kickstart
Oto przewodnik do rozpoczęcia korzystania z AOP w Spring
http://www.tutorialspoint.com/spring/aop_with_spring.htm
JoinPoint dopasowanie
Oto odniesienia, który opisuje sposób tworzenia join-punkt, który odpowiada na adnotacji: http://eclipse.org/aspectj/doc/next/adk15notebook/annotations-pointcuts-and-advice.html
Podejście # 2:
Innym sposobem jest użycie BeanFactoryPostProcessor - to w zasadzie jak PropertyPlaceholderConfigurer działa.
- Spowoduje wyświetlenie definicji komponentów bean i pobranie podstawowej klasy.
- Następnie sprawdzi adnotację w klasie, używając refleksji.
- Zaktualizuje definicję komponentu bean tak, aby obejmowała wstrzykiwanie właściwości zgodnie z wartością w adnotacji.
. . właściwie myślę, że podejście nr 2 brzmi bardziej jak to, co chcesz - całe przetwarzanie odbywa się przy "uruchomieniu". . . (W rzeczywistości twoja modyfikacja receptur fasoli nawet przed uruchomieniem). . mając na uwadze, że jeśli używałbyś AOP, przechwytywałeś inwokacje metod, które mogą być dla ciebie za późno?
nazw Handler
Jeśli chciałeś można nawet tworzyć własne Wiosna namespace obsługi aby włączyć postprocesora w zwięzły sposób.Np:
<myApp:injectFromDb />
jako alternatywa dla:
<bean class="MyDatabaseLookupProcessorImpl etc, etc. />
Aktualizacja: Podejście nr 3
od wiosny 3.1 istnieje również PropertySourcesPlaceholderConfigurer, która zapewni większość kanalizacji dla Ciebie , dzięki czemu możesz osiągnąć to przy mniejszej ilości kodu.
Chyba jest to kolejna opcja: Użyj Spring 3.1 PropertySourcesPlaceholderConfigurer i dodaj nowe PropertySource dla moich właściwości bazy danych: http://spring.io/blog/2011/02/15/spring-3-1-m1-unified-property-management/ – DarVar