Mam jeszcze znaleźć definicję wysokiego poziomu fasoli jarej, którą mogę zrozumieć. Widzę je często przywoływane w dokumentacji i książkach Grailsa, ale myślę, że zrozumienie, czym są, byłoby korzystne. Czym są fasolki szparagowe? Jak można ich używać? Czy mają coś wspólnego z Dependency Injection?
397
Odpowiedzi:
Więcej informacji o fasoli i zakresie z SpringSource :
* IoC: Odwrócenie kontroli
źródło
@Autowired
? A może po prostu robię swojeimport
?Fasolka szparagowa to tylko obiekty instancji, którymi zarządza kontener Spring, a mianowicie są one tworzone i łączone przez szkielet i umieszczane w „torbie obiektów” (kontenerze), skąd można je później pobrać.
Część „okablowanie” polega na tym, na czym polega wstrzykiwanie zależności, co oznacza, że możesz po prostu powiedzieć „Będę potrzebować tego”, a struktura będzie przestrzegać pewnych reguł, aby uzyskać odpowiednią instancję.
Dla kogoś, kto nie jest przyzwyczajony do wiosny, myślę, że artykuł Wikipedii Spring ma ładny opis :
źródło
Najpierw pozwól nam zrozumieć wiosnę:
Wiosna to lekka i elastyczna konstrukcja.
Analogia:
Fasola: to obiekt tworzony, zarządzany i niszczony w Spring Container. Możemy wstrzyknąć obiekt do kontenera sprężynowego za pomocą metadanych (xml lub adnotacji), co nazywa się odwróceniem kontroli.
Analogia: Załóżmy, że rolnik uprawia ziemię uprawną za pomocą nasion (lub fasoli). Tutaj Farmer to Spring Framework, Farmland to Spring Container, Beans to Spring Beans, Hodowanie to Spring Processors.
Podobnie jak cykl życia fasoli, fasola szparagowa również ma swój cykl życia.
źródło img
Oto sekwencja cyklu życia fasoli na wiosnę:
Instancja: Najpierw kontener sprężynowy odnajduje definicję komponentu bean z pliku XML i tworzy instancję komponentu bean.
Wypełnij właściwości: przy użyciu wstrzykiwania zależności sprężyna zapełnia wszystkie właściwości określone w definicji komponentu bean.
Ustaw nazwę fasoli: jeśli fasola implementuje
BeanNameAware
interfejs, wiosna przekazuje identyfikator fasoli dosetBeanName()
metody.Ustaw fabrykę fasoli: jeśli Bean implementuje
BeanFactoryAware
interfejs, sprężyna przekazuje fabrykę fasoli dosetBeanFactory()
metody.Przedinicjalizacja: nazywana także post procesami fasoli. Jeśli z komponentem bean są powiązane komponenty BeanPostProcessors,
postProcesserBeforeInitialization()
metoda wywołań Spring .Zainicjuj fasole: jeśli implementuje fasolę
IntializingBean
,afterPropertySet()
wywoływana jest jej metoda. Jeśli komponent bean ma deklarację metody inicjowania, wywoływana jest określona metoda inicjalizacji.Po inicjalizacji: - Jeśli są jakieś
BeanPostProcessors
powiązane z fasolą,postProcessAfterInitialization()
zostaną wywołane ich metody.Gotowy do użycia: Teraz fasola jest gotowa do użycia przez aplikację
Zniszcz: Jeśli fasola się zaimplementuje
DisposableBean
, wywoładestroy()
metodęźródło
Dobrze to częściowo zrozumiałeś. Musisz dostosować fasolę do swoich potrzeb i poinformować kontener Spring, aby zarządzał nim, gdy zajdzie taka potrzeba, za pomocą popularnej metodologii znanej jako IoC ( Inversion of Control ) opracowanej przez Martina Fowlera , znanej również jako Dependency Injection (DI).
Drut fasoli łączy się w taki sposób, aby nie trzeba było zajmować się tworzeniem instancji ani oceniać zależności od fasoli. Jest to powszechnie znane jako Zasada Hollywood .
Google jest najlepszym narzędziem do odkrywania tego więcej, oprócz linków, które zostałyby zalane tutaj w tym pytaniu. :)
źródło
Wiosna ma pojemnik IoC, który zawiera worek fasoli; utrzymanie i usuwanie kreacji jest obowiązkiem Spring Container. Możemy wprowadzić fasolę do wiosny za pomocą okablowania i automatycznego okablowania. Okablowanie oznacza, że ręcznie konfigurujemy go w pliku XML, a „Automatyczne okablowanie” oznacza, że umieszczamy adnotacje w pliku Java, a następnie Spring automatycznie skanuje kontekst główny, w którym znajduje się plik konfiguracyjny Java, tworzy go i umieszcza w torbie Spring.
Oto szczegółowy identyfikator URI, w którym masz więcej informacji na temat fasoli
źródło
Fasolka szparagowa to klasy. Zamiast tworzenia instancji klasy (za pomocą
new
) otrzymujesz instancję jakobean
rzut na typ swojej klasy z kontekstu aplikacji, gdzie komponent bean jest tym, co skonfigurowałeś w konfiguracji kontekstu aplikacji. W ten sposób cała aplikacja zachowuje instancję singleton-scope w całej aplikacji. Wszystkie komponenty bean są inicjowane zgodnie z kolejnością konfiguracji zaraz po utworzeniu instancji kontekstu aplikacji. Nawet jeśli w aplikacji nie ma żadnych komponentów bean, wszystkie instancje typu bean są już tworzone zaraz po utworzeniu kontekstu aplikacji.źródło
Fasolka szparagowa to tylko instancja obiektu zarządzana przez kontener Spring IOC.
W wiosennym kontenerze MKOl znajduje się Bag of Bean. Tworzenie, konserwacja i usuwanie zawartości leżą w gestii Spring Container.
Możemy wprowadzić fasolę do wiosny za pomocą okablowania i automatycznego okablowania.
Okablowanie oznacza, że ręcznie konfigurujemy go w pliku XML.
Automatyczne okablowanie oznacza, że umieszczamy adnotacje w pliku Java, a następnie Spring automatycznie skanuje kontekst główny, w którym plik konfiguracyjny Java, tworzy go i umieszcza w torbie Spring.
źródło
Fasola to POJO (Plain Old Java Object), który jest zarządzany przez kontener wiosenny.
Kontenery sprężynowe domyślnie tworzą tylko jedno wystąpienie fasoli. Ta fasola jest buforowana w pamięci, więc wszystkie żądania fasoli zwrócą wspólne odwołanie do tej samej fasoli.
Adnotacja @Bean zwraca obiekt, który sprężyna rejestruje jako komponent bean w kontekście aplikacji. Logika wewnątrz metody odpowiada za utworzenie instancji.
Kiedy używamy adnotacji @Bean?
Gdy automatyczna konfiguracja nie jest opcją. Na przykład, gdy chcemy połączyć komponenty z biblioteki innej firmy, ponieważ kod źródłowy jest niedostępny, więc nie możemy adnotować klas za pomocą @Component.
Scenariusz w czasie rzeczywistym może polegać na tym, że ktoś chce połączyć się z segmentem Amazon S3. Ponieważ źródło nie jest dostępne, musiałby utworzyć @bean.
Źródło powyższego kodu -> https://www.devglan.com/spring-mvc/aws-s3-java
Ponieważ wspomniałem o adnotacji @Component powyżej.
@Component Wskazuje, że klasa z adnotacjami jest „komponentem”. Takie klasy są uważane za kandydatów do automatycznego wykrywania w przypadku korzystania z konfiguracji opartej na adnotacjach i skanowania ścieżki klasy.
Adnotacja komponentu rejestruje klasę jako pojedynczą fasolę.
źródło
Wiosną te obiekty, które tworzą szkielet aplikacji i którymi zarządza kontener Spring IoC, są nazywane fasolami. Fasola jest po prostu obiektem, który jest tworzony w instancji, składany i zarządzany w inny sposób przez kontener Spring IoC;
źródło
Książka: Just Spring
źródło
Konfiguracja XML Springa składa się z Fasoli, a Fasola to w zasadzie klasy. To tylko POJO, których używamy wewnątrz naszego ApplicationContext. Zdefiniowanie fasoli można traktować jako zastąpienie słowa kluczowego new. Więc gdziekolwiek używasz słowa kluczowego new w swojej aplikacji, coś takiego:
Tam, gdzie używasz tego słowa kluczowego new , gdzieś możesz spojrzeć na usunięcie tej konfiguracji i umieszczenie jej w pliku XML. Więc zakodujemy w ten sposób:
Teraz możemy po prostu użyć Setter Injection / Constructor Injection. Używam Setter Injection.
źródło