Java - wstrzyknięcie obiektów za pomocą beanów i Autowired w konkretnym przypadku

0

Cześć,
przedstawię najpierw swój, jak sądzę typowy dość, scenariusz. Używam Spring-Boot.

class Controller { 
  SomeDAO someDAO;
 }

class SomeDAO {
   B b; //  to jest tworzone przez konstruktor bezparametrowy.
   C c; // to wymaga jednego parametru - instancji obiektu B, właśnie z tej samej klasy.
}

I teraz chciałbym użyć beanów i/lub Autowired, żeby dokonać powstrzykiwania tych zależności:

Czyli wiem jak powinno to działać (wstrzyknij b, weź to b jako parametr dla c - wstrzyknij je - następnie wstrzyknij to do kontrolera) , ale nie potrafię tego zaimplementować, a nie chcę tego robić nie wiedząc co się dzieje. Może ktoś mi pokazać to na tym przykładzie?

Proszę o nieodsyłanie mnie do turoriali, bo ja właśnie przyszedłem tu z tutoriala i chcę zobaczyć konkretny przykład.

1

Ale co tu chcesz wstrzykiwać? Bo nie rozumiem. Skoro b i c są tworzone? Ty je chcesz tworzyć czy maja być beanami?

0

Chcę, żeby zostały automatycznie stworzone przez springa - nie chcę na nich wołać new. Czyli ja nie chcę ich tworzyć, chcę je mieć po prostu. A ten opis co wymaga jakiego parametru., to tylko żeby lepiej przedstawić moją styuację/

1

A ok, no to trzeba było tak od razu:

@Controller
class Controller {
  @Inject 
  SomeDAO someDAO;
 }

@Named
class SomeDAO {
   @Inject
   B b;
   @Inject
   C c;
}

@Named
class B{
}

@Named
class C{
  @Inject
  B b;
}

i voila, jeśli o to ci chodziło.

Ładniej będzie ten inject dać na kontruktor ponoć, a nie na pole, ale jak tam wolisz.

0

Właśnie chyba nie o to,
skąd niby będzie wiadomo, że akurat do tworzenia c użyć jako parametru wstrzykniętego przed chwilą b ?

Poza tym, nie mogę dodać @named nad tymi klasami, bo one nie są moje, tylko pewnej biblioteki.

0

@xawery to rozumiem że mam zgadywać dalej bo nie potrafisz jak człowiek napisać co konkretnie robisz i co chcesz osiągnąć? Spoko, szklana kula w dłoń...
Możesz sobie stworzyć te beany też przez @Bean skoro klasy nie są twoje. No i w przykładzie wyżej to są singletony więc wiadomo że c będzie miało to samo b, bo jest tylko jedno. Niemniej ja przypuszczam ze tutaj żadne wstrzykiwanie nie ma sensu i kombinujesz niepotrzebnie... Ma to jakiś sens żeby DAO było springowym beanem, tak samo kontroler, ale póki nie wyjaśnisz czym są b i c to skłaniam sie ku temu że to powinny być zwykłe obiekty.

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