2013-05-14 6 views
8

Wstrzyknęłam fasolę z zarządzaniem sprężynowym do klasy abstrakcyjnej i wygląda na to, że nie działa. Oto wyjaśnienie, co mam zrobić, jeśli to nie wystarczy, mogę edytować post i dodać kod:Wstrzykiwanie fasoli do klasy abstrakcyjnej za pomocą sprężyny i java ee 5

  1. wprowadzania kodu java - 1 klasa abstrakcyjna, 2 klasy, które dziedziczą z niego i Bean być wstrzykiwane i używane w klasie abstrakcyjnej, a więc przez podklasy.
  2. zdefiniować fasolę w konfiguracji wiosna.
  3. definiuje klasę abstrakcyjną i 2 podklasy w konfiguracji źródłowej.
  4. zdefiniować pierwszy komponent bean jako właściwość abstrakcyjnego bean klasy.

wynik - to nie działa.

Następnie próbowałem przenieść wstrzykniętą fasolę z klasy abstrakcyjnej do dwóch podklas. Teraz działa.

Czy zrobiłem coś złego, czy teoretycznie niemożliwe jest wstrzyknięcie fasoli do klasy abstrakcyjnej z wiosną 3 i Java EE 5?

Odpowiedz

11

Czy teoretycznie niemożliwe jest wprowadzenie fasoli do klasy abstrakcyjnej z wiosną 3 i Java EE 5?

Injection Injection dzieje się na obiekcie, a nie jego klasie. Spring wstrzykuje zależności do zarządzanych komponentów, które są obiektami już utworzonymi przez Spring. Ponieważ nie można utworzyć instancji klasy abstrakcyjnej, byłoby koncepcyjnie błędne myślenie o tutaj DI.

W nieco zbliżonym notatniku można również zdefiniować klasę inną niż abstrakcyjna jako abstrakcyjny komponent Spring Spring, dodając atrybut abstract=true do znacznika <bean>. Oznacza to, że komponent bean nie byłby instancjonowany i służyłby jako zwykły szablon właściwości, które inne komponenty bean mogą wykorzystywać przez dziedziczenie komponentu bean (które w ogóle nie jest powiązane z dziedziczeniem Java).

W tym kontekście (jeśli został skonfigurowany) Injection Dependency nastąpi tylko dla komponentów bean podrzędnych, a nie ich komponentów nadrzędnych, ponieważ zostały zdefiniowane jako abstrakcyjne. (Uwaga: nie jest obowiązkowe, aby komponent bean rodzicielski był abstrakcyjny, ale ma sens, aby to zrobić, gdy działa tylko jako zestaw wspólnych właściwości komponentu bean).

+0

Dzięki za odpowiedź. Ale czytam, że DI jest możliwy w klasach abstrakcyjnych w Java EE 6, prawda? – user1414745

+0

Wstrzykiwana właściwość może być zdefiniowana w klasie abstrakcyjnej, ale zastrzyk nastąpi tylko w obiekcie, co oznacza, że ​​jest obiektem podklasy. –

Powiązane problemy