2009-12-22 8 views
9

Jak działa adnotacja Wicket's @SpringBean? Czy używa refleksji w czasie wykonywania? Czy powoduje to, że kompilator wprowadza jakiś kod? Albo co?Jak działa adnotacja Wicket's @SpringBean?

+1

Brak adnotacji "@ SpringBean" w Spring API. Jest jeden w Wicket, ale czy to właśnie używasz? – skaffman

+1

Ah, nie wiedziałem tego - tak, używam Wicket. Zmienię to pytanie i tagi, aby to odzwierciedlić. Dzięki. – Tarquila

+0

@Tarquila - Myślę, że łatwiej jest rozwiązać to pytanie na wiosnę. I dodaj nową dla Wicket. –

Odpowiedz

0

Spring używa modułu ładującego klasy i ASM w czasie wykonywania, aby znaleźć wszystkie przypisane klasy.

Można configure gdzie sprężyna powinna szukać ziaren:

<context:component-scan base-package="some.package.to.start.from"/> 

używa ClassPathBeanDefinitionScanner wewnętrznie który użyje PathMatchingResourcePatternResolver znaleźć klas i ASM oparte MetadataReader czytać adnotacje.

+5

Ten mechanizm nie ma jednak nic wspólnego z '@ SpringBean', który jest konstruktem Wicket, a nie Spring. – skaffman

+0

Nigdy nie korzystałem z Wicket. Myślałem, że miał na myśli adnotacje @Component itd. Dobrze wiedzieć. –

25

@SpringBean działa przy użyciu usługi Wicket's underlying Injector mechanism. Kiedy tworzysz komponent Wicket, konstruktor klasy bazowej składnika Wicket introspekuje instancję klasy, szukając adnotacji @SpringBean. Jeśli zostanie znaleziony komponent bean, to funkcja generuje proxy dla komponentu bean sprężystej i wprowadza go do pola składnika. Jest to odpowiednik Wicket's z adnotacji Spring @Autowired, efekt jest podobny.

Nie ma to jednak nic wspólnego z funkcją kontekstowego skanowania wiosennego/ścieżki klasy (np. @Component), która polega na automatycznym wykrywaniu tego, co jest i nie jest fasolą, a raczej ma coś wspólnego z okablowanie.

+3

Aby skorzystać z tej funkcji, wystarczy dodać moduł nasłuchujący SpringComponentInjector do aplikacji Wicket, aby móc wysłuchać wystąpień komponentów. – Matt

4

Klasa oznaczone @SpringBean adnotacją musi mieć jedno z następujących:

  1. jest zastosowanie argumentów konstruktora
  2. nadrzędnej z nie-args konstruktora
  3. zaimplementowania interfejsu

Wyjątek zostanie zgłoszony, jeśli te warunki nie zostaną spełnione, ponieważ Wicket nie będzie mógł pełnić roli przedstawiciela klasy.

+0

to przydatne informacje, ale nie jest to odpowiedź na to pytanie. może lepiej jako komentarz zadać pytanie lub inną odpowiedź. –