spring framework - j2ee s lidskou tvari
DESCRIPTION
Predstaveni Spring frameworku.TRANSCRIPT
![Page 1: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/1.jpg)
The Spring framework – J2EE s lidskou tváří
![Page 2: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/2.jpg)
Opravdu s lidskou tváří?
![Page 3: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/3.jpg)
Trochu o mě
• Roman Pichlík
• HP Software
• Blog http://sweb.cz/pichlik
• Czech Java User Group
• CZ Podcast
![Page 4: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/4.jpg)
415. listopad 2007
Agenda
• J2EE
• Proč je tu Spring
• Spring IOC
• Spring AOP
• Spring DAO
• Dynamické jazyky
• Spring a vliv na J2EE
![Page 5: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/5.jpg)
J2EE intro
• Nadstavba standardní Javy
−Enterprise oblast
• Misssion critical aplikace
−Webové aplikace?
• Sada specifikací a API
−Java Community Process
−Middleware dodavatelé
• Klíčové technologie
−EJB, JTA, Servlety a JSP, JSF, JNDI, JCA a další...
![Page 6: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/6.jpg)
Jak bylo J2EE myšleno
• Robustnost
• Interoperabilita
• Bezpečnost
• Cluster-aware
• SOA
• Buzzwords...
![Page 7: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/7.jpg)
Jak to dopadlo
• One size fits all
−80/20
−Webové aplikace
• Velká komplexnost
−Jednoduché věci složitě a složité nemožně
−Příliš mnoho k učení
• Standardy vs Standardizace
−Pomalá adopce
−Rychlé zastarávání
![Page 8: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/8.jpg)
Co lidé opravdu chtějí
• Jednoduchost
−Testovatelnost
−Vývoj
−Nasazení
• Agilnost
−myšlenky
−technologie
−postupy
![Page 9: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/9.jpg)
Nabídka se nestřetla s poptávkou
![Page 10: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/10.jpg)
Přichází náš rytíř
? ?
![Page 11: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/11.jpg)
Přichází náš rytíř
![Page 12: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/12.jpg)
Přichází náš rytíř
? ?
![Page 13: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/13.jpg)
Přichází náš rytíř
![Page 14: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/14.jpg)
Přichází náš rytíř
? ?
![Page 15: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/15.jpg)
Přichází náš rytíř
![Page 16: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/16.jpg)
Historie Spring frameworku
• 2002
− Rod Johnson, J2EE Design and Development
• Návod jak dobře a úspěšně používat J2EE
• 30000 řádků kódu
• 2003 založení open source projektu− http://springframework.org/
− http://www.springframework.org/documentation
![Page 17: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/17.jpg)
Úhel pohledu
• Komplexní řešení
−Web, Enterprise, Desktop
• Poskytovatel služeb
−transakce, AOP, konfigurace, remoting...
• Rozhraní aplikace/prostředí
−aplikační server, webový kontejner, testy
• Rozhraní aplikace/technologie
−Hibernate, JMS, JSF, JPA, JDBC, EJB...
![Page 18: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/18.jpg)
Co možná o Springu uslyšíte
• Náhrada J2EE a především EJB
• Sada modulů pro různé použití
• Továrna na továrny
• Webový framework
• Sada pomocných API pro Hibernate
• Přežitek v době EJB 3.0
• Výstřelek zhýralých vývojářů
![Page 19: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/19.jpg)
Největší mýty
• Spring se nehodí pro Enterprise aplikace
−10 velkých bankovních institucí používá Spring
−Weblogic, WebSphere AS certifikují Spring
• Spring nepoužívají velké firmy
−eBay, Oracle, HP
• Spring nejde škálovat
−Open Terracotta
−Tangosol Coherence Data Grid
![Page 20: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/20.jpg)
Základní myšlenky
• Zjednodušení komplexnosti
−Nejenom J2EE
−API Abstrakce
• Neinvazivnost
• Zaměření na architekturu aplikace
• Jednoduchá testovatelnost a použití
• Modulárnost
![Page 21: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/21.jpg)
Základní myšlenky řečí technologie
• Inversion Of Control
• Aspektově orientované programování (AOP)
• OOP přístup
−programování rozhraním
• Open-Closed princip
−otevřený pro rozšíření
−uzavřený pro modifikace
• POJO (Plain Old Java Objects) přístup
![Page 22: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/22.jpg)
Stavební kameny
![Page 23: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/23.jpg)
Modulárnost
• Použij co potřebuješ
• JAR distribuce
−kompletní (2,5 MB)
−po modulech
• Malá závislost na knihovnách třetích stran
• Různé scénáře použití modulů
![Page 24: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/24.jpg)
Všechny moduly
![Page 25: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/25.jpg)
Integrace s web frameworky
![Page 26: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/26.jpg)
Remoting
![Page 27: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/27.jpg)
Subprojekty kolem Springu
• Spring Web Flow
• Spring Security
• Spring Dynamic Modules
• Spring Web Services
• Spring Batch
• Spring Integration
• Spring IDE
• Spring SpringSource dm Server
![Page 28: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/28.jpg)
Inversion Of Control
![Page 29: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/29.jpg)
Příklad
• Rezervace knih
![Page 30: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/30.jpg)
Typický kódpublic class ReservationService{
private BookService bookService;
public ReservationService() {
init();
}
private void init () {
//create concrete instance of BookService implementation
LocalBookStore localBookStore = new LocalBookStore();
localBookStore.setPath("/usr/home/data.xml"); //setup
bookService = localBookStore;
}
public boolean reserveBook(long bookId, Date from,Date to,User u) {
Book book = bookService.getBook(bookId);
//reservation code omitted
return true;
}
}
![Page 31: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/31.jpg)
Typický kód - problémy
• Těsné vazby mezi objekty
−Volba konkrétní implementace
−Odpovědnost za inicializaci
private void init () {
//create concrete instance of BookService implementation
LocalBookStore localBookStore = new LocalBookStore();
localBookStore.setPath("/home/dagi/data.xml"); //setup
bookService = localBookStore;
}
![Page 32: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/32.jpg)
Inversion Of Control
• M. Fowler (2004) návrhový vzor
• Proč
−Těsné vazby mezi objekty
−Vytváření a skládání objektů podle jejich vazeb
• Jak
−Obrácená kontrola
−Odpovědnost na někom třetím
• IoC kontejner
• Chce to mentální kotrmelec ;-)
![Page 33: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/33.jpg)
IoC kontejner
![Page 34: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/34.jpg)
public class ReservationService { private BookService bookService;
public boolean reserveBook(long bookId, Date from, Date to, User user) { Book book = bookService.getBook(bookId); //reservation code omitted return true; }
}
public class LocalBookStore implements BookService { private String path; public Book getBook(long bookId) {; //accessing code omitted } }
}
Objekty (POJOs)
![Page 35: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/35.jpg)
@Componentpublic class ReservationService { @Autowired private BookService bookService; ...}
@Componentpublic class LocalBookStore implements BookService { @Autowired @Qualifier("file.path") private String path; ....}<beans> <context:annotation-config/> <context:component-scan base-package="cz.sweb.pichlik"/> <bean id="file.path" class="java.lang.String"> <constructor-arg value="/home/dagi.data.xml"></constructor-arg> </bean></beans>
Metadata
![Page 36: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/36.jpg)
ApplicationContext container =
new ClassPathXmlApplicationContext("applicationContext.xml");
ReservationService reservationService =
(ReservationService) container.getBean(ResrvationService.class);
Kontejner
![Page 37: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/37.jpg)
Test
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"applicationContext.xml"})
public class ReservationServiceTest {
@Autowired
private ReservationService reservationService;
@Test
public void testReserveBook() {
reservationService.reserveBook
...
}
}
![Page 38: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/38.jpg)
Spring IoC kontejner
• Základní a nejdůležitější komponenta
• Metadata
−XML, Anotace, Konfigurační kód atd.
• Snadná inicializace
−Testy, Web, EJB, programově
• Atributy
−Hierarchie, Události, Dependency injection
−Scopes, Placeholders, vysoká customizovatelnost
−...
![Page 39: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/39.jpg)
Spring kontejner vs. EJB kontejner
definice závislosti anotace, XML descriptor
aplikovatelnost bez omezení
nepřímé závislosti ano nesetter, anotace proměnné
extension pointy
typem, jménem ne
Spring IoC EJB 3.0 IoCXML descriptor, anotace, properties, konfigurační java kód
Servlet, listener classes, web services end-point, JAX-RPC handlers, DataSource, JMS, Mail, EJB, Environment entries, EntityManager, UserTransaction, EJB Beans, interceptors, web services end-point, DataSource, JMS, Mail, Environment entries, EntityManager, EJB Context,
způsob nastavení závislosti
setter, anotace proměnné, konstruktor AOP, BeanPostProcessor, Factory, lifecycle rozhrani, typová konverze
interceptory, lifecycle rozhrani
autowiring
![Page 40: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/40.jpg)
Autowiring – beans collecting
Loosely coupled extensibility
Sběr objektů určitého typu
@Component
public class ServiceRegistry {
@Autowired
private List<BusinessService> services;
}
@Component("serviceA")
public class BusinessServiceA implements BusinessService {
}
@Service("serviceB")
public class BusinessServiceB implements BusinessService {
}
![Page 41: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/41.jpg)
Aspect Oriented Programming
(AOP)
![Page 42: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/42.jpg)
AOP
• Myšlenka„V každé aplikaci máme kousky kódu, které se nám prolínají všemi vrstvami naší aplikace, ale do žádné nepatří konkrétně. Těmto kouskům kódu můžeme říkat aspekty.
AOP nabízí možnost tyto aspekty prolínat stávajícím kódem aniž bychom tento kód museli modifikovat.“
![Page 43: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/43.jpg)
AOP• Nový přístup pro řešení
tradičních oblastí
−implementační overhead
• Aspekt
−Ucelený kus kódu
−Java třída
−Typy
• Produkční
• Vývojové
![Page 44: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/44.jpg)
Základní pojmy• Join Point
−Definuje stavy, ve kterých se může nacházet vykonávání kódu např. volání metody, volání konstruktoru, statická inicializace atd.
• Pointcut−Definuje jazyk, pomocí kterého se lze na
jednotlivé Join Ponty zavěsit• Advice
−Umožňuje nadefinovat vlastní kód, který se vykoná v závislosti na zavěšení pointcatu. V podstatě když nastane tohle, udělám toto.
• Weaving−začlenění aspectu do kódu aplikace
• Target object−cílový objekt, který je obohacen o aspekt
![Page 45: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/45.jpg)
Aspect
• Aspect = Advice + Pointcut
![Page 46: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/46.jpg)
Jednoduchý aspect (AspectJ)
@Aspect
public class ProfilingAspect {
@Around("execution(* cz.sweb.pichlik.springaop.dao.UserStorageDao.*(..))")
public Object tracingMethod(ProceedingJoinPoint call) throws Throwable{
long start = System.nanoTime();
try{
return call.proceed();
}finally{
long time = System.nanoTime() - start;
System.out.println("Invocation time:"+ time + "ns");
}
}
}
anotace označující třídu jako aspect
pointcut definice
volání metody target objektu
anotace označující advice
![Page 47: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/47.jpg)
Spring AOP
• Integrace AspectJ
−ne všechny vlastnosti (ořezaný pointcut language)
• Anotace, XML
• Runtime weaving (proxy)
![Page 48: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/48.jpg)
AOP netradiční případy užití
• Synchronizace
−Kontrola zámků
• Překlad výjimek
• Cacheování výsledků volání metod
• Introduction
![Page 49: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/49.jpg)
Přístup do databáze
![Page 50: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/50.jpg)
Problém jménem JDBC
Využití JDBC se skládá z těchto činností Získání databázového připojení
Vytvoření statementu
Nastavení parametru a exekuce SQL
Procházení resultsetu a zpracování dat
Uzavření resultsetu, statementu a datab. připojení
Ošetření java.sql.SQLException
Typický kód pak vypadá následovně
![Page 51: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/51.jpg)
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
con = getConnection();//ziskej databazove pripojeni
String sql = "select count(*) from user";
ps = con.prepareStatement(sql); //vytvor statement
rs = ps.executeQuery(); //vykonej
while(rs.next()){
//zpracuj hodnoty
}
}finally{ //a prosimte nezapomen vse uvolnit...
rs.close();
ps.close();
con.close();
}
JDBC klasika
![Page 52: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/52.jpg)
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
con = getConnection();
String sql = "select count(*)from user";
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
//zpracuj hodnoty
}
}finally{
rs.close();
ps.close();
con.close();
}
• Co je špatně
−Často se opakující kód
• DP „Najdi a vlep“
−Starat se o uzavírání zdrojů
−Ošetření SQLException
−Míchání odpovědností
• Vykonání
• Zpracování výsledků
• Co je špatně
−Často se opakující kód
• DP „Najdi a vlep“
−Starat se o uzavírání zdrojů
−Ošetření SQLException
−Míchání odpovědností
• Vykonání
• Zpracování výsledků
![Page 53: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/53.jpg)
Řešení
• společný kód je nadefinován v předkovi
−potomek přepisuje pouze to co potřebuje
• obvykle zpracování řádku ResultSetu
• Spring definuje pro JDBC účely třídu−org.springframework.jdbc.core.JdbcTemplate
![Page 54: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/54.jpg)
JdbcTemplate – příklady užití
int rowCount = jdbcTemplate.queryForInt("select count(*) from user");
Actor actor = (Actor) jdbcTemplate.queryForObject(
"select first_name, surname from t_actor where id = ?",
new Object[]{new Long(1212)},
new RowMapper() {
public Object mapRow(ResultSet rs, int rn) throws SQLException {
Actor actor = new Actor();
actor.setFirstName(rs.getString("first_name"));
actor.setSurname(rs.getString("surname"));
return actor;
}
});
![Page 55: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/55.jpg)
Spring DAO
• Abstrakce
−Usnadňuje použití
• JDBC, Hibernate, JPA, iBatis
−Překlad SQLException na vlastní hierarchie výjimek
• Napojení na datasource
• Transakce
−Programově
−Deklarativně (XML, anotace)
![Page 56: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/56.jpg)
Integrace dynamické jazyky
![Page 57: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/57.jpg)
Proč dynamické jazyky
• Protože jsou dynamické oproti Jave
−Deployment
−MOP
−Pestřejší syntaxe (DSL)
• čitelnější API
−use-case orientované
−XML, filesystem
• Vhodné pro určité typy úkolů
−Testy, Frontend, Customizace, Prototypy...
![Page 58: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/58.jpg)
Spring integrace
• Groovy, JRuby, BeanShell<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:lang="http://www.springframework.org/schema/lang"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.5.xsd">
<!-- this is the bean definition for the Groovy-backed Messenger implementation -->
<lang:groovy id="messenger" script-source="classpath:Messenger.groovy">
<lang:property name="message" value="I Can Do The Frug" />
</lang:groovy>
<!-- an otherwise normal bean that will be injected by the Groovy-backed Messenger -->
<bean id="bookingService" class="x.y.DefaultBookingService">
<property name="messenger" ref="messenger" />
</bean>
</beans>
![Page 59: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/59.jpg)
Spring a vliv na J2EE
• J2EE 5
• EJB 3.1
• J2EE 6
−Profily
−SPI
• Budoucnost
−OSGi
![Page 60: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/60.jpg)
SpringSource dm Server
• Spring + Apache + OSGi
![Page 61: Spring framework - J2EE S Lidskou Tvari](https://reader034.vdocuments.net/reader034/viewer/2022051111/556253a0d8b42aa52d8b524c/html5/thumbnails/61.jpg)
Díky za pozornost
Q&A