Пређи на садржај

Spring Framework

С Википедије, слободне енциклопедије
Спринг јава
лого
Оригинални називенгл. Spring
Изговара сеСпринг
Моделобјектно-оријентисани
Актуелна верзија5.3.8
Датум актуелне верзије26.8.2021.
Систем типоваApplication framework
Лиценцаhttps://en.wikipedia.org/wiki/Apache_License
Веб-сајтhttps://spring.io/

Спринг (енг. Spring) представља радни оквир (енг. Framework) за Јавa платформу, који обезбеђује инфраструктуру за развој апликације. Омогућава лакше и брже креирање софтвера, чистији Јава код, а самим тим и лакше одржавање апликације.Спринг је организован у око 20 модула које је могуће појединачно користити у зависности од потреба апликације и отвореног је кода.


Историја верзија

Верзија Датум
0.9 2003
1.0 2004
2.0 2006
3.0 2009
3.1 2011
4.0 2013
4.2 2015
5.0 2017
5.3 2020
5.3.8 2021

Прву верзију је написао Rod Johnson, а представио у октобру 2002. У јуну 2003., оквир је први пут објављен под лиценцом Apache 2.0 license. Прво издање за продукцију (верзија 1.0) је објављено у марту 2004. године.[1] Верзија 1.2.6 је освојила Jolt награду за продуктивност, али и JAX награду за иновацију године. [2][3]Верзија 4.0 подразумева значајна побољшања укључујући подршку за Java SE 8, Groovy 2, неке аспекте Java EE 7 и WebSocket.

МОДУЛИ

Спринг је организован у око 20 модула које је могуће појединачно користити у зависности од потреба апликације.

  • Основно складиште (енг. Core container) је срж овог радног оквира.Контејнер је задужен за креирање објеката, њихово повезивање, конфигурисање и управљање њиховим целокупним животним циклусом од стварања до уништења. Постоје две врсте контејнера, фабрика семена (енг. BeanFactory) и апликациони контекст (енг. ApplicationContext).[4]
  • Аспектно оријентисано програмирање ( енг. Aspect Oriented Programming или AOP) омогућава имплементацију унакрсних проблема
  • Приступ подацима (енг.Data Access) рад са системима за управљање релационим базама података на Јава платформи помоћу Java Database Connectivity (JDBC) и објектно-релационих алата за мапирање NoSQL база података.
  • Инверзија контролног контејнера: конфигурација апликативних компоненти и управљање животним циклусом Јава објеката.
  • Размена порука (енг. Messaging)
  • MVC (енгл. Model-view-controller) оквир заснован на ХТТП-у (енгл. HTTP ) и у сервлету који пружа функционалност за проширење и прилагоћавање веб апликација и RESTful ( репрезентативни пренос стања )
  • Оквир за даљински приступ: конфигурациони позив даљинксе процедуре ( RPC ) која подразумева разврставање стилова Јава објеката преко мрежа које подржавају позивање Јава удаљених метода (RMI) , COBRA ( Архитектура посредника захтева за заједничке објекте ) и протоколе засноване на ХТТП-у, укључујући веб сервисе ( SOAP ( Протокол за једноставан приступ објектима))
  • Управљање трансакцијама : координира трансакције за Јава објекте
  • Даљинско управљање : конфигуративно излагање и управљање Јава објектима за локалну и даљинску конфигурацију путем Проширења управљања Јавом ( енгл. Java Management Extensions)
  • Тестирање : класе за писање јединичних и интеграционих тестова.

Инверзија контролног контејнера

Срж Спринг оквира је његов инверзијски контролни контејнер ( IoC ) , који помоћу рефлексије пружа доследан начин конфигурисања и управљања Јава објектима. Ова врста контејнера је одговорна за управљање животним циклусом одређених Јава објеката. То подразумева креирање ових објеката, позивање њихових метода иницијализације и њихово конфигурисање.

Објекти који су креирани од стране контејнера називају се управљаним објектима. Контејнер се може конфигурисати учитавањем XML ( енгл. Extensible Markup Language) или уз помоћ посебних Јава напомена, што подразумева њихово откривање на конфигурационим класама. Оне дефинишу информације које су неопходне за креирање управљаних објеката.

Објекти се могу добити претраживањем зависности или убацивањем нових објеката од којих ће зависити.[5]Претраживање зависности је образац где од објекта контејнера позивалац тражи објекат са одређеним именом или одређеним типом. Такозвано убризгавање зависности подразумева образац где долази до размене објеката, односно прослеђивања објеката другим објектима. Оно се може извести помоћу конструктора, пропертија или фабричких метода.

Употреба контејнера олакшава конфигурацију и прилагођавање апликације, међутим у многим случајевима није неопходна употреба када се користе други делови Спринг оквира. Спринг контејнер пружа доследан механизам за конфигурисање апликација и интегрише се са готово свим Јава окружењима, од малих апликација до великих пословних апликација. Контејнер се може претворити у делимично усклађен EJB (Enterprise JavaBeans) 3.0 .Програмер не креира директно објекат, већ описује како би требало бити креиран, дефинишући га у Спринг конфигурацијској датотеци. Слично томе, услуге и компоненте се не позивају директно; уместо тога Спринг конфигурациона датотека дефинише које се услуге и компоненте морају позвати. Овај IoC има за циљ да повећа једноставност одржавања и тестирања.

Аспектно-оријентисано програмирање

Спринг оквир има сопствени оквир за аспектно-оријентисано програмирање који модулира међусекторксе проблеме у аспектима.Мотивација за стварање засебног AOP оквира потиче из уверења да би требало омогућити пружање основних AOP функција без превише сложености у дизајну, имплементацији или конфигурацији.Овај оквир је заснован на proxy pattern и конфигуран је за време извођења. Ово дозвољава сано јавно извршавање метода на постојећим објектима на тачки спајања.

У поређењу са AspectJ оквиром, горе поменути спринг је мање моћан, али уједно и мање компликован. Спринг 1.2 укључује подршку за конфигурисање AspectJ аспеката у контејнеру. Спринг 2.0 је додао још интеграција, на пример pointcut се може поново користити и може се мешати са аспектима заснованим на Спринг AOP-у. Затим, Спринг 2.0 је додао нову аспектну библиотеку која користи AspectJ за пружање заједничких Спринг функција, као што су декларативно управљање трансакцијама о убризгавање зависности.

Спринг AOP је осмишљен тако да може да ради са унакрсним проблемима унутар Спринг оквира. Сваки објекат који је креиран и конфигурисан у контејнеру може се обогатити помоћу Спринг AOP-а. Спринг оквир интерно користи Спринг AOP за управљање трансакцијама, сигурност, даљински приступ и JMX.

Од верзије 2.0 оквира, Спринг нуди два приступа конфигурацији AOP -а:

  • приступ заснован на шеми[6]
  • стил означавања заснован на @AspectJ[7]
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop.xsd">

Окврир за приступ подацима

Модул за приступ и интеграцију података (Data Access/Integration) преставља слој апликације који служи за управљање подацима који се налазе у фајл систему или базама података. Подршка је обезбеђена за све популарне оквире за приступ подацима у Јави: JDBC, iBatis/MyBatis, Hibernate, Java Data Objects (JDO, укинуто од 5.х), Java Persistence API (JPA), Oracle TopLink, Apache OJB и Apache Cayenne.

Функције које Спринг пружа:

  • Управљање ресурсима - аутоматско прикупљање и ослобађање ресурса базе података
  • Руковање изузецима - превођење изузетка који је повезан са приступом података
  • Учешће у трансакцији - транспарентно учешће у текућим трансакцијама
  • Одмотавање ресурса - дохватање објеката базе података
  • Апстракција за руковање бинарним великим објектима (BLOB) и знаковним великим објектима (CLOB).

Све ове функције постају доступне када користите класе шаблона које нуди Спринг за сваки подржани оквир.Спринг Фрамеворк је једини оквир доступан у Јави који нуди управљана окружења за приступ подацима изван сервера апликација или контејнера.[8]

Управљање трансакцијама

Спрингов оквир за управљање трансакцијама доноси механизам апстракције на Јава платоформи. Његова трансакција је способа за:

  • рад са локалним и глобалним трансакцијама ( локална трасакција не захтева сервер апликације)
  • рад са уметнутим трансакцијама
  • рад са тачкама чувања
  • ради у готово свим окружењима Јава платформе

Java Transaction API (JTA) подржава само угњежђене трансакције и глобалне трансакције и захтева сервер апликација (а у неким случајевима и примену апликација на серверу апликација).

Оквир пружа два начина додавања управљања трансакцијама:

  • програмски
  • конфигуративно

Модел-поглед-контролер

Модел-поглед-контролер представња оквир за веб апликације, који првобитно није био планиран. Спрингови програмери су одлучили да напишу сопствени веб оквир као реакцију на оно што су тада сматрали лошим дизајном доступних оквира.[9] Посебно су сматрали да постоји недовољно раздвајање између слојева за презентацију и руковање захтевима, и између слоја за руковање захтевима модела.[10]

Спринг је оквир заснован на захтевима. Оквир дефинише стратешке интерфејсе за све.одговорности са којима мора да се носи савремени оквир заснован на захтевима. Циљ сваког интефејса је да буде једноставан и јасан како би сви корисници могли да напишу сопствене имплементације. MVC отвара пут за чистији код. Сви интерфејси су чврсто везани за Servlet API .

Најважнији интерфејси које дефинише Спринг MVC и њихове одговорности наведени су у наставку:

  • Контролер : долази између модела и приказа ради управљања долазним захтевима и преусмеравања на одговарајући одговор. Контролер ће пресликати ХТТП захтев у одговарајуће методе. Пребацује се са преласка на модел или приказ.
  • HandlerAdapter : извршавање објеката који обрађују долазне захтеве
  •  LocaleResolver : служи за одређивање локализације(језика) на основу сесије, колачића, или самог ХТТП захтева
  • MultipartResolver : користи се код отпремања датотека, помаже контролеру да добије фајл и обради га на одговарајући начин
  • ViewResolver : одређује који је формат одговора клијенту, на основу имена клијента
  • View : одговоран за враћање одговора клијенту. Неки захтеви се могу погледати директно без одласка на део модела; други могу проћи кроз све три.

Сваки горе наведени интерфејс има важну одговорност у укупном оквиру. Спринг MVC се испоручује са имплементацијама свих ових интерфејса и заједно нуди скуп функција на врху Servlet API . Међутим, програмери могу слободно писати друге имплементације.Важна предност високог нивоа апстракције коју нуди Спринг MVC јесте једноставност тестирања имплементација ових интерфејса.

Ток рада Спринг MVC

Када корисник кликне на везу или пошаље образац свом веб прегледачу, захтев иде на Спринг DispatcherServlet. Он консултује једно или више мапирања, изабран је као одговарајући контролор и прослеђује захтев. Контролер обрађује одређени захтев и генерише резултат. Ове информације је потребно форматирати у html- у или било којој технологији попут JSP-а. Када контролер није повезан са одређеним приказом, DispatcherServlet проналази стварни JSP уз помоћ ViewResolver .

Конфигурација DispatcherServlet-а

Мора бити конфигурисан у web.xml

<servlet>
  <servlet-name>MyServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>

<servlet-mapping>
  <servlet-name>MyServlet</servlet-name>
  <url-pattern>/<url-pattern>
</servlet-mapping>

Оквир за управљање на даљину

Оквир за даљински приступ је апстракција за рад са различитим технологијама заснованим удаљеним позивима процедура доступним на Јава платформи и за повезивање клијената и за разврставање објеката на серверима. Најважнија карактеристика коју нуди овај оквир је олакшавање конфигурације и употребе ових технологија што је више могуће комбиновањем инверзије контроле и AOP-а.

Оквир омогућава аутоматскос поновно повезивање након прекида везе. Спринг пружа подршку за ове протоколе и производе :

  • протоколе засноване на ХТТП :
    • Hessian : бинарни протокол за серијализацију, одржава се помоћу протокола заснованих на CORBA
    • RMI (1) : позивање метода користећи RMI инфраструктуру која је специфична за Спринг
    • RMI (2) : позивање метода помоћу RMI интерфејса у складу са редовном употребом RMI -ја
    • RMI-IIOP (CORBA) : позивање метода помоћу RMI-IIOP (CORBA)
  • SOAP
    • Интеграција са оквиром веб услуга Apache Axis

Apache CXF пружа интеграцију са Спринг оквиром за извоз објеката у стилу RPC-а на страни сервера.

Брзи развој апликација преко конвенције

Spring Boot

Spring Boot је Спрингово решење за конфигурацију преко конвенције за креирање самосталних апликација заснованих на Спрингу, које можете " покренути ".[11]Већини Spring Boot апликација је потребно врло мало Спринг конфигурације.

Кључне карактеристике:

  • Креирање самосталне Спринг апликације
  • Уградња Tomcat-а или Jetty директно (нема потребе за постављањем WAR датотека )
  • Обезбеђена одлучни "почетни" модели пројектних објеката
  • Аутоматска конфигурација Спринга када год је то могуће
  • Омогућене функције спремне за производњу, као што су метрике, проверене исправности и спољна конфигурација
  • Апсолутно нема генерисања кода и нема захтева за XML конфигурацију.
  • Интеграција и подржавање свих образаца интеграције предузећа

Spring Roo

Spring Roo је пројекат заједнице који нуди алтернативни приступ заснован на генерисању кода при коришћењу конфигурације преко конвенције за брзу израду апликација у Јави. Тренутно подржава Spring Security и Spring Web Flow . Разликује се од других оквира за брзи развој апликација фокусирањем на :

  • Проширење (путем података)
  • Продуктивност Јава платформе (за разлику од других језика)
  • Избегавање закључавања
  • Избегавање извршавања
  • Употребљивост (посебно преко функција љуске и начина коришћења)

Batch оквир

Spring Batch је оквир за пакетну обраду који пружа функције за вишекратну употребу које су неопходне за обраду великих количина запис, укључујући :

  • евидентирање/праћење
  • управљање трансакцијама
  • статистика обраде послова
  • поновно покретање посла

Такође пружа напредније техничке услуге и функције које ће омогућити оптимизацију и технике партиционисања серијских послова изузетно великог обима и високих перформанси. Spring Batch извршава низ послова; посао се састоји од много корака, а сваки корак се састоји од задатка ЧИТАЊЕ-ОБРАДА-ПИСАЊЕ .

Процес " ЧИТАЊЕ-ОБРАДА-ПИСАЊЕ " се састоји од ових корака : "читање" података из ресурса, "обрада" затим "уписивање" у друге ресурсе. На пример, могу се прочитати податке из CSV датотеке, затим обрадити их, а касније и уписати у базу података.

Појединачни оперативни задатак представља могућност да се ради само један задатак, као што је чишћење ресурса пре или након покретања. Кораци се могу повезати заједно да би се изводили као посао.

Оквир интеграције

Спринг интеграције је оквир који пружа функције за вишекратну употребу неопходне за слање порука или архитектуре засноване на догађајима.

  • рутери - усмерава поруку до канала за поруке на основу услова
  • трансформатори - претвара/трансформише/мења корисни терет поруке и ствара нову поруку са трансформисаним корисним оптерећењем
  • адаптери - за интеграцију са другим технологијама и системима
  • филтри - филтрира поруку на основу критеријума. Ако критеријуми нису испуњени, порука се одбацује
  • активатори услуге - позивају операцију на услужном објекту управљања и ревизије

Референце

  1. ^ „Spring Framework 1.0 Final Released”. Official Spring Framework blog. Приступљено 27. 8. 2021. 
  2. ^ Jolt winners 2006
  3. ^ „JAX Innovation Award Gewinner 2006”. Архивирано из оригинала 17. 8. 2021. г. 
  4. ^ Spring Framework documentation for the Core Container
  5. ^ What is the difference between the depencylookup and dependency injection - Spring Forum. Forum.springsource.org (2009-10-28). Retrieved on 2013-11-24.
  6. ^ Spring AOP XML Configuration
  7. ^ AspectJ Annotation Configuration
  8. ^ „Spring Data JPA for Abstraction of Queries”. Приступљено 27. 08. 2021. 
  9. ^ Introduction to the Spring Framework
  10. ^ Johnson, Expert One-on-One J2EE Design and Development, Ch.12. et al.
  11. ^ Spring Boot