2013-03-11 15 views
15

Jestem nowy w ramach wiosennej. W większości tutoriali wiosennych, które widziałem, Spring jest opisany jako "nieinwazyjny".Jakie jest dokładne znaczenie inwazji? a co sprawia, że ​​Spring jest nieinwazyjny?

Co należy rozumieć przez inwazyjne? Jakie są zalety używania Spring w Javie i co czyni go nieinwazyjnym?

+3

Wiosna to rak dla projektu, który po zainfekowaniu projektu nie da się zrobić bez włamywania się do wiosennych plików konfiguracyjnych ... nieinwazyjny jest dość mylący na tym froncie! –

+0

Całkowicie zgadzam się, że wiosna to rak. W rzeczywistości jest to rak, który rozprzestrzenił się w całym obszarze kodu, a baza kodów nie pozostała długo w użyciu. –

Odpowiedz

8

Jeśli kontener IoC jest inwazyjny, to znaczy, że kod musi być wyraźnie świadomi wstrzykiwania zależności. Na przykład w Guice używa się adnotacji @Inject (i innych). Adnotacje te są bardziej znormalizowane niż kiedyś, co jest dobre - oznacza to, że dzięki pojedynczemu zestawowi adnotacji (przynajmniej teoretycznie) możesz udostępnić swój kod do użycia z różnymi inwazyjnymi kontenerami IoC.

Z nieinwazyjny pojemniku, można napisać kod bez odniesienia do IoC w ogóle ... wszystko jest tylko określa refleksji nad członkami i adnotacji, które byłyby obecne, nawet jeśli nie były przy użyciu IoC .

Istnieją plusy i minusy zarówno inwazyjnych, jak i nieinwazyjnych pojemników - bardziej szczegółowe w kodzie mogą na przykład zapewnić większą kontrolę nad niektórymi szczegółami wiązania - ale warto być świadomym różnicy.

+0

"Jeśli kontener IoC jest inwazyjny, oznacza to, że twój kod musi być wyraźnie świadomy zastrzyku zależności." Oznacza to, że informacje o zależnościach są wyświetlane lub przedstawiane w kodzie Java, jeśli kontener IoC jest inwazyjny ....... czy to jest dobrze ? Nie rozumiem, co próbujesz powiedzieć ... – JackVimal

+1

@JackVimal: jeśli używasz inwazyjnego kontenera (lub używasz go w sposób inwazyjny), odwołasz się do adnotacji i prawdopodobnie interfejsów które są specyficzne dla IoC, zamiast pisania kodu, który jest całkowicie neutralny, ambiwalentny względem IoC. –

+1

Opisujesz inwazyjność IoC, a nie inwazyjność ramową. Myślę, że dokładniej jest powiedzieć, że inwazyjny kontener IoC wymaga użycia adnotacji do frameworka lub rozszerzenia klas/interfejsów szkieletu, podczas gdy nieinwazyjny kontener wymaga tylko użycia standardowej Java, tj. Javax.inject.Inject. Nazywamy Spring nieinwazyjny, ponieważ do korzystania z IoC wystarczy użyć standardowej Java (nieinwazyjnej). W przypadku Guice możesz użyć wersji @Inject programu Guice: com.google.inject.Inject (inwazyjna) lub Guice implementacji javax.inject.Inject (nieinwazyjnej). – Jay

4

check http://forum.springsource.org/showthread.php?27846-Spring-is-non-invasive

Co to naprawdę znaczy?

„Nie jesteś zmuszony do importu lub przedłużyć żadnych API Wiosna, przykład Struts sił na rozszerzenie akcji”.

Oczywiście w niektórych obszarach, takich jak ramy internetowej, że to niemożliwe, aby uniknąć kodu aplikacja zależności od ram. Ale wiosna konsekwentnie stara się dotrzeć do nieinwazyjnego ideał gdzie zarządzanie konfiguracją jest zaniepokojony

3

Wiosna może być inwazyjne i nieinwazyjne, to tylko od ciebie.

Sprężyna nieinwazyjna nie używa adnotacji (na przykład @Autowired) ani własnych klas (na przykład JdbcTemplate), używa tylko konfiguracji do łączenia fasoli (proste POJO) razem (nadal trzeba zainicjować sprężynę w twoim kodzie, który i tak jest trochę inwazyjny). Ale możesz swobodnie wiosną bez znaczących zmian kodu. Z drugiej strony wiosna inwazyjna zapewnia klasy szablonów (dla trwałości, usług sieciowych, ...), adnotacji i innych rzeczy, których nie można po prostu pozostawić bez refaktoryzacji (jeśli ich używasz).

EDIT: Niektórzy mówią, że wiosna nie jest inwazyjne, ponieważ nie zmusza cię do wdrożenia interfejsy ani przedłużyć klas. Dla mnie framework nie jest inwazyjny, jeśli można go łatwo zastąpić.

+0

Dokładniej: "Wiosna nieinwazyjna nie używa adnotacji wiosennych". Na przykład, zastępując '@ Autowired' przez' @ Inject', otrzymujesz tę samą funkcjonalność bez użycia adnotacji Spring. Zobacz http://stackoverflow.com/questions/7142622/what-is-the-difference-between-inject-and-autowired-in-spring-framework- which – Paul

0

Wiosenna struktura jest nieinwazyjna oznacza, że ​​nie zmusza programisty do rozszerzenia lub implementacji swojej klasy z dowolnej predefiniowanej klasy lub interfejsu podanego przez Spring API, w kolumnach, których używaliśmy do rozszerzenia klasy Action, właśnie dlatego Mówi się, że rozpórki mają charakter inwazyjny.

W przypadku rozporek ram, będzie to zmusza programistę, że klasa programista musi wystawać z klasy bazowej przez rozporki API.

2

Większość ram java zmusić cię do przedłużenia jednego ze swoich klas lub wdrożenie jednego ze swoich interfejsów.Przykładem takiego inwazyjnego modelu programowania były: bezpaństwowe ziarna sesji EJB 2, wcześniejsze wersje bezstanowe sesji Struts, WebWork, Tapestry.

Wiosna unika zaśmiecania kodu za pomocą interfejsu API. Sprężyna nigdy nie zmusza użytkownika do wdrożenia interfejsu sprężynowego lub rozszerzenia specyficznej dla wiosny klasy. Zamiast tego zajęcia często nie mają żadnego oznaczenia, że ​​są używane przez Spring.

public class HelloWorld { 
public String hello() { 
return "Hello World"; 
} 
} 

Jest to prosty, klasa Java (POJO). Nic nie wskazuje, że jest to komponent sprężyny . Wiosna jest nieinwazyjna, co oznacza, że ​​ta klasa może działać równie dobrze w aplikacji Spring, jak w przypadku aplikacji In-Spring . Mimo że POJO są proste, mogą być potężne.

Jednym ze sposobów, w jaki POJO może stać się potężny na wiosnę, jest użycie Dependeny Injection.

0

Używaj @Resource i @Inject zamiast @Component i @Autowired. Jest bardzo przydatny i standaryzowany w ramach DI, takich jak Spring i Guice.

Powiązane problemy