__БЕЗКН__
-{Spring Framework}- је радни оквир за платформу -{Java}- који обезбеђује инфраструктуру за развој апликације. Омогућава лакше и брже креирање софтвера, чистији код на јави, а тиме и лакше одржавање апликације. -{Spring}- је организован у око 20 модула које је могуће појединачно употребљавати зависно од потреба апликације и отвореног је кода.
Историја верзија +ВерзијаДатум0.92003.1.024. март 2004.2.02006.3.02009.3.12011.4.02013.4.22015.5.02017.5.32020.5.3.82021. Прву верзију је написао Род Џонсон, а представио је крајем октобра 2002. У јуну 2003. оквир је први пут објављен под лиценцом Apache 2.0 license. Прво издање за продукцију (верзија 1.0) објављено је у марту 2004. године. Верзија 1.2.6 освојила је награду за продуктивност -{Jolt}-, али и награду за иновацију године -{JAX}-.Jolt winners 2006 Верзија 4.0 обухвата значајна побољшања, попут подршке за Java SE 8, Groovy 2, неке аспекте Java EE 7 и WebSocket.
Модули -{Spring Framework}- је организован у око 20 модула које је могуће појединачно употребљавати у зависности од потреба апликације.
Основно складиште () срж је овог радног оквира. Складиште је задужено за креирање објеката, њихово повезивање, конфигурисање и управљање њиховим целокупним животним циклусом од стварања до уништења. Постоје две врсте складишта — фабрика семена () и апликациони контекст (енгл. ApplicationContext).Spring Framework documentation for the Core Container Аспектно оријентисано програмирање (енгл. Aspect Oriented Programming или AOP) омогућава имплементацију унакрсних проблема Приступ подацима (енгл. Data Access), рад са системима за управљање релационим базама података на платформи Java помоћу Java Database Connectivity (JDBC) и објектно-релационих алата за мапирање база података NoSQL. Инверзија контролног контејнера: конфигурација апликативних компоненти и управљање животним циклусом објеката на јави. Размена порука (енгл. Messaging) MVC (енгл. Model-view-controller), оквир заснован на HTTP-у и у сервлету који пружа функционалност за проширење и прилагоћавање веб-апликација и RESTful (репрезентативни пренос стања) Оквир за даљински приступ: конфигурациони позив даљинксе процедуре (RPC), која подразумева разврставање стилова објеката преко мрежа које подржавају позивање удаљених метода на јави (RMI), COBRA (Архитектура посредника захтева за заједничке објекте) и протоколе засноване на HTTP-у, укључујући веб-услуге (SOAP; Протокол за једноставан приступ објектима). Управљање трансакцијама: координира трансакције за објекте на јави. Даљинско управљање: конфигуративно излагање и управљање објектима на јави за локалну и даљинску конфигурацију путем Проширења управљања јавом (енгл. Java Management Extensions) Тестирање: класе за писање јединичних и интеграционих тестова.
Инверзија контролног контејнера Срж Sping Framework-а је његов инверзијски контролни контејнер (-{IoC}-), који помоћу рефлексије пружа доследан начин конфигурисања и управљања објектима на јави. Ова врста контејнера одговорна је за управљање животним циклусом одређених објеката. То подразумева креирање ових објеката, позивање њихових метода иницијализације и њихово конфигурисање.
Објекти које је креирао контејнер називају се управљаним објектима. Контејнер се може конфигурисати учитавањем -{XML}--а (енгл. Extensible Markup Language) или помоћу посебних напомена на јави, што подразумева њихово откривање на конфигурационим класама. Оне дефинишу информације које су неопходне за креирање управљаних објеката.
Објекти се могу добити претраживањем зависности или убацивањем нових објеката од којих ће зависити.What is the difference between the depencylookup and dependency injection - Spring Forum. Forum.springsource.org (2009-10-28). Retrieved on 2013-11-24. Претраживање зависности је образац где од објекта контејнера позивалац тражи објекат с одређеним именом или одређеним типом. Убризгавање зависности подразумева образац где долази до размене објеката, тј. прослеђивања објеката другим објектима. Оно се може извести помоћу конструктора, пропертија или фабричких метода.
Употреба контејнера олакшава конфигурацију и прилагођавање апликације. Међутим, у многим случајевима није неопходна употреба кад се употребљавају други делови Spring Framework-а. Spring-ов контејнер пружа доследан механизам за конфигурисање апликација и интегрише се с готово свим Јава окружењима, од малих апликација до великих пословних апликација. Контејнер се може претворити у делимично усклађен EJB-ом 3.0 .Програмер не креира директно објекат, већ описује како би требало бити креиран, дефинишући га у Спринг конфигурацијској датотеци. Слично томе, услуге и компоненте се не позивају директно; уместо тога Спринг конфигурациона датотека дефинише које се услуге и компоненте морају позвати. Циљ тог IoC-а је повећање једноставности одржавања и тестирања.
Аспектно-оријентисано програмирање Spring Framework има сопствени оквир за аспектно-оријентисано програмирање који модулира међусекторксе проблеме у аспектима.Мотивација за стварање засебног AOP оквира потиче из уверења да би требало омогућити пружање основних AOP функција без превише сложености у дизајну, имплементацији или конфигурацији.Овај оквир је заснован на proxy pattern и конфигуран је за време извођења. Ово дозвољава сано јавно извршавање метода на постојећим објектима на тачки спајања.
У поређењу са AspectJ оквиром, горе поменути спринг је мање моћан, али уједно и мање компликован. Спринг 1.2 укључује подршку за конфигурисање AspectJ аспеката у контејнеру. Спринг 2.0 је додао још интеграција, на пример pointcut се може поново користити и може се мешати са аспектима заснованим на Спринг AOP-у. Затим, Спринг 2.0 је додао нову аспектну библиотеку која користи AspectJ за пружање заједничких Спринг функција, као што су декларативно управљање трансакцијама о убризгавање зависности.
Спринг AOP је осмишљен тако да може да ради са унакрсним проблемима унутар Spring Framework-а. Сваки објекат који је креиран и конфигурисан у контејнеру може се обогатити помоћу Спринг AOP-а. Spring Framework интерно користи Спринг AOP за управљање трансакцијама, сигурност, даљински приступ и JMX.
Од верзије 2.0 оквира, Спринг нуди два приступа конфигурацији AOP-а:
приступ заснован на шеми стил означавања заснован на @AspectJAspectJ Annotation Configuration <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.
Функције које Spring пружа:
Управљање ресурсима - аутоматско прикупљање и ослобађање ресурса базе података Руковање изузецима - превођење изузетка који је повезан са приступом података Учешће у трансакцији - транспарентно учешће у текућим трансакцијама Одмотавање ресурса - дохватање објеката базе података Апстракција за руковање бинарним великим објектима (BLOB) и знаковним великим објектима (CLOB).
Све ове функције постају доступне када користите класе шаблона које нуди Спринг за сваки подржани оквир.Спринг Фрамеворк је једини оквир доступан у Јави који нуди управљана окружења за приступ подацима изван сервера апликација или контејнера.
Управљање трансакцијама Спрингов оквир за управљање трансакцијама доноси механизам апстракције на Јава платоформи. Његова трансакција је способа за:
рад са локалним и глобалним трансакцијама ( локална трасакција не захтева сервер апликације) рад са уметнутим трансакцијама рад са тачкама чувања ради у готово свим окружењима Јава платформе
Java Transaction API (JTA) подржава само угњежђене трансакције и глобалне трансакције и захтева сервер апликација (а у неким случајевима и примену апликација на серверу апликација).
Оквир пружа два начина додавања управљања трансакцијама:
програмски конфигуративно
Модел-поглед-контролер Модел-поглед-контролер представња оквир за веб апликације, који првобитно није био планиран. Спрингови програмери су одлучили да напишу сопствени веб оквир као реакцију на оно што су тада сматрали лошим дизајном доступних оквира. Посебно су сматрали да постоји недовољно раздвајање између слојева за презентацију и руковање захтевима, и између слоја за руковање захтевима модела.Johnson, Expert One-on-One J2EE Design and Development, Ch.12. et al.
Спринг је оквир заснован на захтевима. Оквир дефинише стратешке интерфејсе за све.одговорности са којима мора да се носи савремени оквир заснован на захтевима. Циљ сваког интефејса је да буде једноставан и јасан како би сви корисници могли да напишу сопствене имплементације. MVC отвара пут за чистији код. Сви интерфејси су чврсто везани за Servlet API.
Најважнији интерфејси које дефинише Спринг MVC и њихове одговорности наведени су у наставку:
Контролер: долази између модела и приказа ради управљања долазним захтевима и преусмеравања на одговарајући одговор. Контролер ће пресликати HTTP захтев у одговарајуће методе. Пребацује се са преласка на модел или приказ. 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-а.