Java: Articolul Cadrul de primăvară: Bazele
Primăvara este acum destul de popular proiect OpenSource, care acoperă multe aspecte ale modului în care J2EE, și de dezvoltare Java.
Scopul acestui articol este de a descrie arhitectura și caracteristicile principale de primăvară.
arhitectură
Arhitectura de primăvară este reprezentat de următoarea schemă
![Bazele cadru de primăvară (cărți show2b linie) Elementele de bază cadru de primăvară](https://images-on-off.com/images/48/thespringframeworkosnovi-4c0d556f.jpg)
Fig. Schema de primăvară 1
Mai târziu, în articol vom discuta despre principalele componente ale cadrului de primăvară.
1. Recipient IoC
În primăvară, pe baza inversiunea model de control. În ceea ce privește recipientele ușoare, ideea de bază a acestui model este de a elimina dependența componentelor sau a claselor de implementări de aplicații specifice ale interfețelor auxiliare și delegarea de autoritate pentru a gestiona crearea implementărilor necesare IoC container. Luați în considerare diagrama UML.
IoC container este responsabil pentru crearea punerea în aplicare necesară a produselor pentru consum. Când se utilizează clasa de consum în alte proiecte, vom fi în măsură să înlocuiască punerea în aplicare a interfeței de produse mai potrivite, fără a schimba codul.
Principalele avantaje containere Ioc:- gestionarea dependenței
- simplificarea claselor de reutilizare sau a componentelor
- simplifica unitate de testare
- mai mult cod „curat“ (clase nu mai sunt implicate în inițializarea facilități auxiliare. Nu este necesar, desigur, „prea departe“, de conducere crearea de absolut toate obiectele prin intermediul IoC. Containerul IoC este cel mai bine pentru a face aceste interfețe, punerea în aplicare a, care poate fi modificat în proiectul curent sau în proiecte viitoare.)
IoC model vă permite nu numai să elimine dependența de punerea în aplicare. O alternativă la IoC sunt bine șabloane ServiceLocator / Factory cunoscute.
![Bazele cadru de primăvară (Fundamentals) Elementele de bază cadru de primăvară](https://images-on-off.com/images/48/thespringframeworkosnovi-e71656d5.jpg)
Fig. 3 Template ServiceLocator Această abordare introduce dependența de ServiceLocator de cod, ceea ce duce la o flexibilitate mai scăzută. Principalul șablon dezavantaje ServiceLocator:
- Dacă în același proiect, în diferite cazuri, necesită diferite implementări de produse, va trebui fie să se schimbe ServiceLocator de asteptare codul utilizat în toate domeniile, specificând parametrii suplimentari pentru a schimba ceva el ServiceLocator. Ambele opțiuni duc la „gunoaiele“ codul, introducerea unor condiții și parametri suplimentari, care complică codul și reutilizarea.
- Când utilizați cod în alte proiecte
- (ServiceLocator distribuit cu sursă) În cazul în care pentru punerea în aplicare a produsului dorit, parametri suplimentari trebuie să facă modificări la ServiceLocator furnizate. De asemenea, conduce la existența în sistemul de ServiceLocator mai multe, fiecare dintre acestea trebuie să fie în propriul său mod de a configura, ceea ce face dificil de a sprijini.
- (ServiceLocator nu este furnizat cu codul) În acest caz, este necesar să se schimbe ServiceLocator apel la cel utilizat în sistem. Introducerea unei interfețe comune, de asemenea, nu rezolvă problema.
Cel mai comun mod de dependențe care specifică sunt fișiere de configurare XML (applicationContext.xml). Descrierea formatului acestui fișier este dincolo de domeniul de aplicare al acestui articol.
Spring este mult mai mult decât doar un container IoC. Cadrul simplifică dezvoltarea de proiecte J2EE, implementarea de nivel scăzut și cel mai adesea icpolzuemye parte a unei aplicații de întreprindere.
Una dintre componentele cheie ale Spring este cadrul AOP. Chiar și fără a utiliza în mod direct de AOP, vă sunt susceptibile de a le întâlni în mod indirect.
Principalele sarcini care trebuie rezolvate cu ajutorul AOP în primăvară:- managementul tranzacției declarativă.
- Punerea în comun a obiectelor.
- Scrierea propriilor aspecte.
Cel mai convenabil mod flexibil și managementul tranzacției este managementul tranzacție declarativă. Dacă ați lucrat cu EJB CMT, bine imaginați-vă ce este. Declarativă codul de tranzacție de gestionare elimină dependența de un cadru sau un control specific tranzacție.
Fișierul de configurare (applicationContext.xml) este după cum urmează:
Obiectul este deja myService tranzacțional MyBusinessObject, accesul la acesta se face prin Proxy (TransactionProxyFactoryBean), și care gestionează tranzacțiile. Pentru utilizator, nu va exista nici o diferență care lucra cu proxy, care lucra cu MyBusinessObject direct. Există un alt mod de a descrie configurația tranzacției prin BeanNameAutoProxyCreator. Această metodă face posibilă pentru a reduce dimensiunea fișierului de configurare. Pentru mai multe informații, consultați documentația.
Punerea în comun a obiectelor folosite în EJB. Container sprijină piscina sesiune EJB apatridă atunci când apelați obiectul este eliberat din piscină. Atunci când se utilizează de primăvară, facilități piscina poate fi menținută pentru orice (Object Plain Old Java) POJO. Un exemplu de fișier de configurare:
AOP ajuta la eliminarea de cod duplicat. Java este un limbaj orientat pe obiecte, care vă permite să creați o ierarhie de obiecte legate. Dar dacă același cod este folosit în diferite ierarhii de obiecte?
puteți lua în considerare orice aplicație din două perspective. În ceea ce privește funcționalitatea de clase separate (preocupările de bază) și care acoperă toate aplicațiile funcționale (preocupări) transversale. Module, se referă la controlul polizarea, numite aspecte. În primăvară aspecte sunt realizate prin intermediul Consultanților și interceptoare.
Aspecte pot efectua următoarele sarcini: exploatare forestieră, de cache, de management al securității, tranzacții, etc. Introducerea unui strat suplimentar de interceptoare delimiteaza responsabilitate între sursa principală și sarcinile auxiliare. Acest lucru simplifică întreținerea și reutilizarea codului. Spoilere sunt configurate în mod independent, ele pot fi utilizate în alte proiecte, la rândul lor, obiectele pot fi configurate cu diferite spoilere.
De exemplu, ia în considerare sarcina - determinare a timpului de execuție metode. Acest lucru poate fi util pentru a identifica blocajele, la fel ca în timpul testării, iar producția în numărul real de utilizatori pe date reale.
Notă interfața org.aopalliance.intercept.MethodInterceptor. Această interfață AOP Alliance. Prin urmare, o astfel de spoilere portabile alte cadre AOP. Primăvara are propriile sale interfețe interceptoare concepute pentru diferite ocazii. În acest articol, nu sunt luate în considerare aceste interfețe.
MethodInterceptor oferă control mai complet asupra procesului. Pentru sarcina noastră este potrivită pentru această interfață.
În linia 12 există un interceptor apel următor în lanț sau obiectul principal al metodei. Notă, pentru ceea ce PerformanceInterceptor ar oferi informații mai exacte cu privire la performanța unei metode de timp, ar trebui să fie ultimul în lanțul.
Acum trebuie doar să modificați fișierul de configurare.
Caracteristici suplimentare
Așa cum am menționat mai devreme, de primăvară IoC container în plus include un set de clase care implementează funcționalitatea cele mai cerute de aplicatii J2EE. Spring simplifică foarte mult de lucru cu JDBC, cadrele ORM, EJB, servicii Web. Cadrul pune în aplicare un nivel mai ridicat de gestionare a adreselor abstractizare poștală, cache, executarea sarcinilor programate. În plus, primăvara include, de asemenea, un cadru Web.
Este puțin probabil ca toate caracteristicile de primăvară vor fi utilizate în aplicația dumneavoastră. Deci, puteți include în cerere numai acele jar-fișiere, clase pe care le utilizați. Spring include clase în borcan pe pachete: primavara-aop.jar, primăvară-beans.jar etc. Puteți include, de asemenea, un borcan cu toate clasele - spring.jar.
Mai mult, unele dintre caracteristicile de primăvară cadru vor fi descrise.
Vom începe imediat cu un exemplu.
Nu mai este nevoie să scrie modele greoaie încercați de captură (..) în cele din urmă, a gestiona conexiunile, tranzacțiile. interogări simple se potrivesc, în general, într-o singură linie.
Internalizarea (i18n) și configurația
Spring include clase și interfețe destinate să internalizeze aplicația. Toate mesajele sunt stocate în fișiere de proprietăți. Un fișier de proprietăți corespunde o singură limbă. Pentru a avea acces la aceste rapoarte, trebuie să adăugați applicationContext.xml messageSource bin. Numele MessageSource este obligatorie. Spring acceptă posturi ierarhice.
În interfață ApplicationContext (interfață de bază care definește configurația aplicației) este metode corespunzătoare getMessage (MessageSourceResolvable rezolvabile, localizare Locale), getMessage (cod String, Object [args], locale localizare), getMessage (cod String, Object [args], String defaultMessage, locale localizare). Exemplu de utilizare:
Toate setările de configurare pentru aplicația convenabil stocate într-una sau mai multe fișiere de proprietăți. Acestea pot fi accesate direct din applicationContext.xml. Pentru a face acest lucru, trebuie să adăugați bin applicationContext.xml.
Apoi, parametrii pot fi accesate după cum urmează.
În cazul în care parametrul de configurare jdbc.jndiName în WEB-INF / config.properties.
Eveniment de manipulare în primăvară, prin clasa ApplicationEvent ApplicationListener și interfață. Atunci când are loc un eveniment, sesizând toate obiectele care implementeaza interfata ApplicationListener. Să considerăm un exemplu.
Call context.publishEvent () are loc în modul sincron. Toate ApplicationListener efectuate în același context ca și tranzacțional EventPublisher.
concluzie
Acest articol a acoperit principiile de bază și o parte din caracteristicile de primăvară. Pentru un studiu mai detaliat vă recomandăm să citiți cartea de primăvară în acțiune și documentația care a venit cu distribuția.
Principalele avantaje ale primăvară sunt: simplitatea; test de utilitate; folosind un impact pozitiv asupra primăvară de proiectare aplicare și ușurința de cod.
În primăvară, ea a vândut o mulțime fără de care nu face aproape orice aplicație Java. Înainte de a inventa ceva un aspect diferit, poate că e deja în primăvară.
Avertizare. mysql_connect () [function.mysql-connect]: Nu se poate conecta la serverul MySQL local prin socket '/tmp/mysql.sock' (2), în /pub/home/javaport/javaportal/books/show2b.php pe linia 11
Avertizare. mysql_db_query () [function.mysql-db-interogare]: Nu se poate conecta la serverul MySQL local prin socket '/tmp/mysql.sock' (2), în /pub/home/javaport/javaportal/books/show2b.php pe linia 19
Avertizare. mysql_db_query () [function.mysql-db-interogare]: Un link către serverul nu a putut fi stabilită în /pub/home/javaport/javaportal/books/show2b.php pe linia 19
Avertizare. mysql_fetch_array (): furnizat argumentul nu este o resursă valabil rezultat MySQL în /pub/home/javaport/javaportal/books/show2b.php pe linia 30
Aflați ce te gândești acum într-adevăr aici.
[A apărut o eroare în timpul procesării prezentei directive]
Avertizare. mysql_connect () [function.mysql-connect]: Nu se poate conecta la serverul MySQL local prin socket '/tmp/mysql.sock' (2), în /pub/home/javaport/javaportal/news/worldnews.php pe linia 91
Avertizare. mysql_db_query () [function.mysql-db-interogare]: Nu se poate conecta la serverul MySQL local prin socket '/tmp/mysql.sock' (2), în /pub/home/javaport/javaportal/news/worldnews.php pe line 93
Avertizare. mysql_db_query () [function.mysql-db-interogare]: Un link către serverul nu a putut fi stabilită în /pub/home/javaport/javaportal/news/worldnews.php pe linia 93
Avertizare. mysql_fetch_array (): furnizat argumentul nu este o resursă valabil rezultat MySQL în /pub/home/javaport/javaportal/news/worldnews.php pe linia 95