Dużo słyszę o Springu , ludzie mówią w Internecie, że Spring to dobra platforma do tworzenia stron internetowych. Do czego dokładnie służy Spring Framework?
Dużo słyszę o Springu , ludzie mówią w Internecie, że Spring to dobra platforma do tworzenia stron internetowych. Do czego dokładnie służy Spring Framework?
Odpowiedzi:
Zasadniczo wiosna jest ramą dla zastrzyk zależności który jest wzorcem, który pozwala budować bardzo oddzielone systemy.
Załóżmy na przykład, że musisz wymienić użytkowników systemu, a tym samym zadeklarować interfejs o nazwie UserLister
:
public interface UserLister {
List<User> getUsers();
}
A może implementacja uzyskująca dostęp do bazy danych, aby uzyskać wszystkich użytkowników:
public class UserListerDB implements UserLister {
public List<User> getUsers() {
// DB access code here
}
}
Twoim zdaniem musisz uzyskać dostęp do instancji (pamiętaj tylko o przykładzie):
public class SomeView {
private UserLister userLister;
public void render() {
List<User> users = userLister.getUsers();
view.render(users);
}
}
Zauważ, że powyższy kod nie zainicjował zmiennej userLister
. Co powinniśmy zrobić? Jeśli jawnie utworzę instancję obiektu w ten sposób:
UserLister userLister = new UserListerDB();
... Połączę widok z moją implementacją klasy, która uzyskuje dostęp do bazy danych. Co jeśli chcę przełączyć się z implementacji DB na inną, która pobiera listę użytkowników z pliku oddzielonego przecinkami (pamiętaj, to przykład)? W takim przypadku chciałbym przejść do mojego kodu i zmienić powyższą linię na:
UserLister userLister = new UserListerCommaSeparatedFile();
Nie ma problemu z takim małym programem, ale ... Co dzieje się w programie, który ma setki widoków i podobną liczbę klas biznesowych? Utrzymanie staje się koszmarem!
Spring polega na łączeniu klas za pomocą pliku XML lub adnotacji, w ten sposób wszystkie obiekty są tworzone i inicjowane przez Spring i wstrzykiwane we właściwe miejsca (serwlety, struktury sieciowe, klasy biznesowe, DAO itp. Itp.) ...)
Wracając do przykładu z Springa, potrzebujemy tylko setera dla userLister
pola i pliku XML takiego jak ten:
<bean id="userLister" class="UserListerDB" />
<bean class="SomeView">
<property name="userLister" ref="userLister" />
</bean>
lub, po prostu, adnotacje w naszej klasie widoku @Inject
:
@Inject
private UserLister userLister;
W ten sposób, gdy widok zostanie utworzony, magicznie będzie UserLister
gotowy do pracy.
List<User> users = userLister.getUsers(); // This will actually work
// without adding any line of code
To jest wspaniałe! Czyż nie
UserLister
interfejsu? Po prostu zmień XML.UserLister
gotowej implementacji? Zaprogramuj tymczasową próbną implementację UserLister
widoku i ułatw jego rozwój.Istnieje kilka innych opcji dla Dependency Injection, które moim zdaniem sprawiły, że Spring jest tak sławny, poza prostotą, elegancją i stabilnością, że faceci z SpringSource zaprogramowali wiele POJO, które pomagają zintegrować Spring z wieloma innymi powszechnymi frameworkami bez bycia ingerujący w twoją aplikację. Ponadto Spring ma kilka dobrych podprojektów, takich jak Spring MVC, Spring WebFlow, Spring Security i ponownie długa lista etceteras.
Mam nadzieję że to pomoże. W każdym razie zachęcam do przeczytania artykułu Martina Fowlera o wstrzykiwaniu zależności i inwersji kontroli, ponieważ robi to lepiej niż ja. Po zrozumienia podstaw przyjrzeć wiosennym Dokumentacji , moim zdaniem, to jest wykorzystywane do być najlepszy Wiosna książka kiedykolwiek.
Wiosna zawiera ( jak słusznie zauważył Skaffman ) framework MVC. Krótko mówiąc, oto moje uwagi. Wiosna obsługuje segregację warstwy usług, warstwy internetowej i warstwy biznesowej, ale to, co naprawdę robi najlepiej, to „wstrzykiwanie” obiektów. Aby to wyjaśnić na przykładzie, rozważ poniższy przykład:
public interface FourWheel
{
public void drive();
}
public class Sedan implements FourWheel
{
public void drive()
{
//drive gracefully
}
}
public class SUV implements FourWheel
{
public void drive()
{
//Rule the rough terrain
}
}
Teraz w kodzie masz klasę o nazwie RoadTrip w następujący sposób
public class RoadTrip
{
private FourWheel myCarForTrip;
}
Teraz, gdy chcesz instancję Trip; czasami możesz chcieć, aby SUV zainicjował FourWheel lub czasami możesz chcieć Sedana. To zależy od tego, czego chcesz, w zależności od konkretnej sytuacji.
Aby rozwiązać ten problem, chcesz mieć wzorzec fabryczny jako wzorzec kreacyjny. Gdzie fabryka zwraca właściwą instancję. Tak więc ostatecznie skończysz z dużą ilością kodu kleju, aby poprawnie utworzyć instancję obiektów. Wiosna najlepiej wykonuje kod kleju bez tego kodu. Deklarujesz odwzorowania w formacie XML, który automatycznie inicjuje obiekty. Dużo też robi przy użyciu architektury singleton dla instancji, co pomaga w zoptymalizowanym wykorzystaniu pamięci.
Jest to również nazywane Inwersją Kontroli. Inne ramy do tego celu to guice Google, kontener Pico itp.
Oprócz tego Spring ma strukturę sprawdzania poprawności, szerokie wsparcie dla warstwy DAO we współpracy z JDBC, iBatis i Hibernate (i wiele innych). Zapewnia doskonałą kontrolę transakcyjną transakcji w bazie danych.
Spring ma o wiele więcej do powiedzenia w dobrych książkach, takich jak „Pro Spring”.
Pomocne mogą być także następujące adresy URL.
http://static.springframework.org/docs/Spring-MVC-step-by-step/
http://en.wikipedia.org/wiki/Spring_Framework
http://www.theserverside.com/tt/articles/article .tss? l = SpringFramework
Stare dzień, wiosna była praca zależność wtrysk tylko jak rama ( Guice , PicoContainer , ...), ale w dzisiejszych czasach jest to kompletne rozwiązanie do budowania aplikacji korporacyjnych .
Zastrzyk uzależnienia od wiosny, który jest oczywiście sercem wiosny, nadal istnieje (i możesz przejrzeć inne dobre odpowiedzi tutaj), ale jest więcej od wiosny ...
Wiosna ma teraz wiele projektów, każdy z pewnymi podprojektami ( http://spring.io/projects ). Kiedy ktoś mówi o wiośnie, musisz dowiedzieć się, o czym mówi projekt wiosenny , czy jest to tylko rdzeń wiosenny, który jest znany jako szkielet wiosenny , czy to kolejne projekty wiosenne.
Niektóre projekty wiosenne, o których również warto wspomnieć, to:
Jeśli potrzebujesz dodatkowej funkcji dla swojej aplikacji, możesz ją również tam znaleźć:
Są tam również małe projekty, na przykład wiosenno-społeczny-facebook ( http://projects.spring.io/spring-social-facebook/ )
Możesz użyć Spring do tworzenia stron internetowych, ponieważ ma Spring MVC
moduł, który jest częścią projektu Spring Framework . Lub możesz użyć spring z innym frameworkiem internetowym, takim jak struts2 .
Po co jest wiosna? Odpowiem krótko na to pytanie, ale najpierw spójrzmy na przykład przez Victora Hugo. To nie jest świetny przykład, ponieważ nie uzasadnia potrzeby nowego frameworka.
public class BaseView {
protected UserLister userLister;
public BaseView() {
userLister = new UserListerDB(); // only line of code that needs changing
}
}
public class SomeView extends BaseView {
public SomeView() {
super();
}
public void render() {
List<User> users = userLister.getUsers();
view.render(users);
}
}
Gotowy! Więc teraz, nawet jeśli masz setki lub tysiące widoków, nadal musisz tylko zmienić jeden wiersz kodu, tak jak w podejściu Spring XML. Ale zmiana wiersza kodu nadal wymaga ponownej kompilacji, a nie edytowanej wersji XML? Cóż, mój wybredny przyjacielu, użyj Anta i skryptu!
Więc po co jest Wiosna? To dla:
Dalsza lektura: http://discuss.joelonsoftware.com/?joel.3.219431.12
UserLister
), ale co, jeśli potrzebuje kilku usług, które nie są współużytkowane przez różne BaseView
dzieci? Na szczęście w Javie nie ma wielokrotnego dziedziczenia.
Wiosna to trzy rzeczy.
Problem polega na tym, że Spring DI jest naprawdę dobrze przemyślany, owijki wokół innych rzeczy są naprawdę dobrze przemyślane, ponieważ inne rzeczy przemyślały wszystko, a Spring po prostu ładnie je owija. Wiosenne implementacje MVC i REST i wszystkie inne rzeczy nie są tak dobrze zrobione (YMMV, IMHO), ale są wyjątki (Spring Security to da bomb). Dlatego używam Spring do DI i jego fajnych opakowań, ale wolę inne rzeczy do Internetu (bardzo lubię Tapestry), REST (Jersey jest naprawdę solidny) itp.
Czego prawdopodobnie potrzebujesz w aplikacji sieci Web ze Spring -
Ponadto Spring jest OGROMNY - więc istnieje wiele innych rzeczy, które mogą Cię zainteresować w aplikacji internetowej, takich jak Spring AOP lub Spring Security. Ale cztery rzeczy wymienione powyżej opisują typowe komponenty Spring, które są używane w aplikacji internetowej.
Widzę w tym dwie części:
Pamiętaj, że możesz doskonale używać Springa w aplikacji internetowej bez użycia Spring MVC. Powiedziałbym, że większość aplikacji internetowych Java to robi, korzystając z innych struktur internetowych, takich jak Wicket, Struts, Seam, ...
Wiosna jest świetna do sklejania wystąpień klas. Wiesz, że twoje klasy Hibernacji zawsze będą potrzebowały źródła danych, Spring łączy je ze sobą (i ma również implementację źródła danych).
Twoje obiekty dostępu do danych zawsze będą wymagały dostępu Hibernacji, Spring łączy klasy Hibernacji z Twoimi DAO dla Ciebie.
Dodatkowo Spring w zasadzie daje ci solidne konfiguracje wielu bibliotek, a tym samym daje ci wskazówki co do bibliotek, których powinieneś używać.
Wiosna to naprawdę świetne narzędzie. (Nie mówiłem o Spring MVC, tylko o podstawowym frameworku).
Akceptowana odpowiedź nie obejmuje użycia adnotacji, ponieważ Spring wprowadził obsługę różnych adnotacji do konfiguracji.
Istnieje inny sposób połączenia klas za pomocą pliku XML: adnotacje. Użyjmy przykładu z przyjętą odpowiedzi i zarejestrować fasolkę bezpośrednio na klasy, stosując jedną z adnotacji @Component
, @Service
, @Repository
lub @Configuration
:
@Component
public class UserListerDB implements UserLister {
public List<User> getUsers() {
// DB access code here
}
}
W ten sposób, gdy widok zostanie utworzony, magicznie będzie miał UserLister gotowy do pracy.
Powyższe oświadczenie jest ważne z niewielką premią za brak potrzeby użycia pliku XML i okablowania z inną adnotacją, @Autowired
która znajduje odpowiednią implementację i wprowadza ją.
@Autowired
private UserLister userLister;
Użyj @Bean
adnotacji do metody użytej do wprowadzenia implementacji komponentu bean do wstrzyknięcia.
@Bean
adnotacji na poziomie klasy. Musi być jednym z @Component
, @Service
, @Repository
itd. Reszta jest prawidłowe. Powinieneś także zauważyć, że w ten sposób automatyczne okablowanie będzie działało tylko wtedy, gdy w ścieżce klasy będzie tylko 1 klasa kandydująca odpowiednia do wstrzyknięcia, w przeciwnym razie wystąpi błąd aplikacji wiosennej.
Zaletą jest Dependency Injection (DI) . Oznacza to outsourcing zadania tworzenia obiektów. Pozwól mi wyjaśnić na przykładzie.
public interface Lunch
{
public void eat();
}
public class Buffet implements Lunch
{
public void eat()
{
// Eat as much as you can
}
}
public class Plated implements Lunch
{
public void eat()
{
// Eat a limited portion
}
}
Teraz w moim kodzie mam klasę LunchDecide w następujący sposób:
public class LunchDecide {
private Lunch todaysLunch;
public LunchDecide(){
this.todaysLunch = new Buffet(); // choose Buffet -> eat as much as you want
//this.todaysLunch = new Plated(); // choose Plated -> eat a limited portion
}
}
W powyższej klasie, w zależności od naszego nastroju, wybieramy Buffet () lub Plated (). Jednak ten system jest ściśle powiązany. Za każdym razem, gdy potrzebujemy innego typu obiektu, musimy zmienić kod. W takim przypadku komentowanie linii! Wyobraź sobie, że istnieje 50 różnych klas używanych przez 50 różnych osób. To byłby straszny bałagan. W takim przypadku musimy odłączyć system. Przepisajmy klasę LunchDecide.
public class LunchDecide {
private Lunch todaysLunch;
public LunchDecide(Lunch todaysLunch){
this.todaysLunch = todaysLunch
}
}
Zauważ, że zamiast tworzyć obiekt za pomocą nowego słowa kluczowego przekazaliśmy referencję do obiektu typu lunchu jako parametr do naszego konstruktora. Tutaj tworzenie obiektów jest zlecane na zewnątrz. Kod ten można podłączyć za pomocą pliku konfiguracyjnego Xml (starsza wersja) lub Adnotacji Java (nowoczesna). Tak czy inaczej, decyzja o tym, jaki typ obiektu zostanie utworzony, byłaby podejmowana w czasie wykonywania. Obiekt byłby wstrzykiwany przez Xml do naszego kodu - nasz Kod jest zależny od Xml dla tego zadania. Stąd wstrzykiwanie zależności (DI). DI nie tylko pomaga w luźnym sprzężeniu naszego systemu, ale także upraszcza pisanie testów jednostkowych, ponieważ pozwala na kpiny z zależności. Wreszcie, DI usprawnia programowanie zorientowane na aspekty (AOP), co prowadzi do dalszego oddzielania i zwiększania modułowości. Zauważ też, że powyżej DI jest wstrzykiwanie konstruktora.
Spring Framework help you with several things like, don't reinvent the wheel. you can connect very easily with some database just using Spring Data, or create schedule tasks like CronJob or Windows Task. amazing !
Wiosna jest dobrą alternatywą dla technologii Enterprise JavaBeans (EJB) . Posiada również komponent frameworka sieciowego i frameworka usług internetowych.
Wiosna zaczęła się jako dość prosty system wstrzykiwania zależności. Teraz jest ogromny i ma w nim wszystko (oprócz przysłowiowego zlewu kuchennego).
Ale nie bój się, jest dość modułowy, dzięki czemu możesz używać tylko tych elementów, które chcesz.
Aby zobaczyć, gdzie to wszystko się zaczęło, spróbuj:
To może być stara, ale jest to doskonała książka.
Kolejna dobra książka, tym razem poświęcona wyłącznie wiośnie, patrz:
Odwołuje się także do starszych wersji Spring, ale zdecydowanie warto na nie spojrzeć.
Wiosna na początku była zastrzykiem zależności, a następnie dodawała króla owijarek do prawie wszystkiego (opakowanie do implementacji JPA itp.).
Długa historia ... większość części Spring preferuje rozwiązania XML (silnik skryptów XML ... brrrr), więc do DI używam Guice
Dobra biblioteka, ale z rosnącym Depnedenciec, na przykład Spring JDBC (może jedno rozwiązanie Java JDBC z parametrami prawdziwych nazw) bierze od maven 4-5.
Używając Spring MVC (część „wielkiej wiosny”) do tworzenia stron internetowych ... jest to framework oparty na „żądaniach”, istnieje prośba o wojnę świętą kontra komponent… ... zależy od Ciebie
W przeszłości myślałem o frameworku Spring z czysto technicznego punktu widzenia.
Biorąc pod uwagę pewne doświadczenie w pracy zespołowej i tworzeniu korporacyjnych aplikacji internetowych - powiedziałbym, że Spring służy szybszemu tworzeniu aplikacji (aplikacji internetowych) poprzez oddzielenie poszczególnych elementów (komponentów). Szybszy rozwój sprawia, że jest tak popularny. Sprężyna umożliwia przeniesienie odpowiedzialności za budowanie (podłączanie) aplikacji na platformę Spring. Zastrzyk zależności środowiska Spring jest odpowiedzialne za podłączanie / podłączanie poszczególnych ziaren do działającej aplikacji.
W ten sposób programiści mogą bardziej skoncentrować się na rozwoju poszczególnych komponentów (ziaren), gdy tylko zdefiniowane zostaną interfejsy między ziarenkami.
Testowanie takiej aplikacji jest łatwe - główny nacisk kładziony jest na poszczególne ziarna. Można je łatwo oddzielić i wyśmiewać, dzięki czemu testy jednostkowe są szybkie i wydajne.
Framework Spring definiuje wiele wyspecjalizowanych komponentów bean, takich jak @Controller ( @Restcontroller ), @Repository , @Component do celów internetowych. Wiosna wraz z Maven zapewniają intuicyjną strukturę dla programistów. Praca zespołowa jest łatwa i szybka, ponieważ poszczególne elementy są rozdzielone i można je ponownie wykorzystać.
Platforma Spring jest zdecydowanie dobra dla tworzenia stron internetowych i bardziej specyficzna dla spokojnych usług interfejsu API.
Jest dobry na powyższe ze względu na iniekcję zależności i integrację z innymi modułami, takimi jak Spring Security , Spring Aop , Framework Mvc , Microservices
W każdej aplikacji bezpieczeństwo jest najprawdopodobniej wymogiem.
Jeśli chcesz zbudować produkt, który wymaga długiej konserwacji, będziesz potrzebować koncepcji Aop.
Jeśli Twoja aplikacja ma duży ruch, co zwiększa obciążenie, musisz skorzystać z koncepcji mikrousług.
Spring udostępnia wszystkie te funkcje na jednej platformie. Obsługa wielu modułów .
Co najważniejsze, wiosna jest oprogramowaniem typu open source i rozszerzalnym frameworkiem, wszędzie jest haczyk umożliwiający integrację niestandardowego kodu w cyklu życia.
Spring Data to jeden projekt, który zapewnia integrację z Twoim projektem.
Dzięki temu sprężyna zmieści się w prawie każdym wymaganiu.