Tworzenie nowej instancji obiektu zarządzanego przez IoC Springa

0

Witajcie,
Potrzebuję utworzyć nową instancję obiektu z poziomu kodu Java. Problem w tym, że obiekt ten zawiera pola z adnotacjami @Autowired w które muszą być injectowane springowe beany. Jak to zrobić? Myślałem o użyciu scope=prototype i pobraniu beana z kontenera IoC, ale nie jestem przekonany czy to najlepszy pomysł.

0

ale przecież... jak masz prototype to i tak definiujesz w xml'u więc nie robisz tego z poziomu javy, jedyny problem jaki może się pojawić mixując beany z różnych scopów to kiedy masz request scope i singleton scope - obchodzi to przez scoped-proxy.

Ty chcesz zarejestrować nowego beana z poziomy javy ? możesz to zrobić: http://random-thoughts-vortex.blogspot.com/2009/03/create-dynamically-spring-beans.html

0

Potrzebuję utworzyć nową instancję obiektu z poziomu kodu Java.

Z tego co zrozumiałem chcesz zrobić new MojObiekt(); A w srodku masz pola @Autowired. I chcesz uzyskac do nich dostęp. Jednak Spring nie zarządza obiektem stworzonym za pomocą (new). Pola obecnie są null, a chcesz mieć referencje do prawdziwych obiektów (np. springowego service / singletona).

Może zastosować następujące podejście:

  • usunąć @Autowired w problematycznym obiekcie (jeśli nie musi być tworzony przez fabryki springowe w innym miejscu)
  • wstrzyknąć potrzebne referencje przez konstruktor w new MojObiekt(ref1,ref2) (wczesniej pobierajac je z fabryki w zarzadzalnym obiekcie, gdzie dokonywane jest tworzenie lub w ostatecznosci z kontekstu po nazwie)
  • ten sam pomysl rownie dobrze mozna zrealizowac na setterach tzn. do MojObiekt dodac settery i przed jego uzyciem manualnie wstrzyknac referencje do obiektow stworzonych przez fabryki
0

Można zrobić to tak:
http://stackoverflow.com/a/1377740

ApplicationContext ctx = ...
YourClass someBeanNotCreatedBySpring = ...
ctx.getAutowireCapableBeanFactory().autowireBeanProperties(
    someBeanNotCreatedBySpring,
    AutowireCapableBeanFactory.AUTOWIRE_AUTODETECT, true);

ale zastanowiłbym się czy to jest naprawdę konieczne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1