Mam aplikację, która ma wiele ekranów i każdy ekran jest wybierany za pomocą przycisku. Każdy ekran zawiera dość ciężkie komponenty, dlatego ważne jest, aby w pamięci był tylko ekran aktywacji - wszystkie inne powinny być dostępne do usuwania śmieci.Używanie getBean zamiast iniekcji metod wiosną
Aplikacja wykorzystuje sprężynowe dla kleju i obecnie przełącza to ekrany używając getBean():
//event handler for a specific button
public void actionPerformed(Event e) {
setScreen((Screen) applicationContext.getBean("screen1"));
}
„screen1” jest prototypem fasola więc nowa instancja ekranu jest tworzony, gdy przycisk jest wciśnięty. Ponadto, setScreen() jest jedynym miejscem, w którym w aplikacji jest utrzymywane odniesienie do ekranu, więc poprzedni aktywny ekran będzie dostępny do usuwania śmieci. Jeszcze tego nie testowałem, ale spodziewam się, że to zadziała dobrze - bez nauki rakietowej tutaj!
Problem jest - po przeczytaniu this page o tym, dlaczego getBean() jest uważany za zły - zastanawiam się, czy istnieje bardziej idiomatyczny sposób osiągnięcia tych samych wyników przy usuwaniu zależności od getBean().
Przyjrzałem się iniekcji metod i wygląda na to, że wprowadzam złożoność z niewielką korzyścią. To kolejna koncepcja do nauki, więcej magii, dodaje zależność od CGLIB, itp. Jeśli naprawdę chcę usunąć zależność od Spring, mogę po prostu wprowadzić interfejs, który odsłania metodę getBean().
Czy metoda getBean() i metoda wstrzykiwania są jedynymi opcjami w moim przypadku lub czy coś przeoczyłem?
A jeśli tak, to czy getBean() jest naprawdę taki zły?
W twoim rozwiązaniu, getbean() jest wywoływana w fabrycznej metodzie create(), prawda? –
Niezupełnie. Zastąpiony jest metodą fabryczną, ale o wiele łatwiej jest kpić z powyższego interfejsu, niż ośmieszać kontekst aplikacji. Plus to wtykany. Ostatecznie jest to nieco prostsza implementacja metody Spring injection injection http://static.springsource.org/spring/docs/2.5.x/reference/beans.html # fasola-fabryka-lookup-method-injection – cletus
Rozumiem, ale gdzie jest metoda tworzenia fabryki() z jej instancji ekranu? –