uma introdução ao framework spring

53
Java EE Leve Java EE Leve Uma introdução ao framework Spring Uma introdução ao framework Spring David Ricardo do Vale Pereira David Ricardo do Vale Pereira [email protected]

Upload: elliando-dias

Post on 26-May-2015

3.329 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Uma introdução ao framework Spring

Java EE LeveJava EE Leve

Uma introdução ao framework SpringUma introdução ao framework Spring

David Ricardo do Vale PereiraDavid Ricardo do Vale [email protected]

Page 2: Uma introdução ao framework Spring

O que é Spring?O que é Spring?

Interface21

Page 3: Uma introdução ao framework Spring

O que é Spring?O que é Spring?

• Reduzir a complexidade do desenvolvimento Java EE

• Simplificar sem perder o poder

• Facilitar o desenvolvimento usando as boas práticas

Page 4: Uma introdução ao framework Spring

O que é Spring?O que é Spring?

• Possibilitar que as aplicações sejam construídas com POJOs

• Aplicação de serviços aos POJOs de maneira declarativa

– Ex: @Transactional

Page 5: Uma introdução ao framework Spring

O que é Spring?O que é Spring?

Poder para os POJOs

Page 6: Uma introdução ao framework Spring

O que é Spring?O que é Spring?

Spring influenciou...

– EJB 3.0

– Java Server Faces

Page 7: Uma introdução ao framework Spring

O que é Spring?O que é Spring?

• Container de DI• AOP• Acesso a dados (JDBC, Hibernate, iBatis...)• Gerenciamento de Transações• Agendamento de Tarefas• Mail Support• Remoting• Spring MVC + Spring Web Flow• Spring RCP

Page 8: Uma introdução ao framework Spring

Injeção de DependênciasInjeção de Dependências

Inversão de Controle

“Inversion of Control (IoC) is a design pattern that addresses a component's dependency resolution, configuration and lifecycle.”

(Paul Hammant - PicoContainer)

Page 9: Uma introdução ao framework Spring

Injeção de DependênciasInjeção de Dependências

Dependency Lookup x Dependency Injection

Page 10: Uma introdução ao framework Spring

Injeção de DependênciasInjeção de Dependências

The Hollywood Principle:

Don't call us, we'll call you!

Page 11: Uma introdução ao framework Spring

Injeção de DependênciasInjeção de Dependências

Injeção de Dependências

Martin Fowler

Inversion of Control Containers and The Dependency Injection

Patternhttp://www.martinfowler.com/articles/injection.html

Page 12: Uma introdução ao framework Spring

Injeção de DependênciasInjeção de Dependências

Bean 1 Bean 2depende de

Exemplo

Page 13: Uma introdução ao framework Spring

Injeção de DependênciasInjeção de Dependências

Sem Inversão de Controle

public class Bean1 { private Bean2 bean2; public void metodo() { bean2 = new Bean2(); // sem IoC bean2.usandoBean(); }

}

Page 14: Uma introdução ao framework Spring

Injeção de DependênciasInjeção de Dependências

Com Dependency Lookup

public class Bean1 { private Bean2 bean2; public void metodo() { bean2 = Factory.getBean2(); // Factory (GoF) bean2.usandoBean(); }

}

Page 15: Uma introdução ao framework Spring

Injeção de DependênciasInjeção de Dependências

Com Dependency Injection

public class Bean1 { private Bean2 bean2; public void metodo() { bean2.usandoBean(); }

public void setBean2(Bean2 bean2) { this.bean2 = bean2; } }

Page 16: Uma introdução ao framework Spring

Injeção de DependênciasInjeção de Dependências

Dois tipos...

– Setter Injection

– Constructor Injection

Spring trabalha com ambos!

Page 17: Uma introdução ao framework Spring

Injeção de DependênciasInjeção de Dependências

Setter Injection

<bean id=”bean2” class=”pacote.Bean2”/>

<bean id=”bean1” class=”pacote.Bean1”><property name=”bean2”>

<ref bean=”bean2”/></property>

</bean>

Page 18: Uma introdução ao framework Spring

Injeção de DependênciasInjeção de Dependências

Constructor Injection

<bean id=”bean2” class=”pacote.Bean2”/>

<bean id=”bean1” class=”pacote.Bean1”><constructor-arg>

<ref bean=”bean2”/></constructor-arg>

</bean>

Page 19: Uma introdução ao framework Spring

AOPAOP

AOP = Aspects Oriented Programming

Aspectos

Page 20: Uma introdução ao framework Spring

AOPAOP

0

Page 21: Uma introdução ao framework Spring

AOPAOP

• Advices– Before Advice

– After Advice

– Around Advice

– Throws Advice

– Introduction Advice

Page 22: Uma introdução ao framework Spring

AOPAOP

Um “Hello World!” com AOP

public class MessageWriter { public void writeMessage() { System.out.println(“World”); }}

Page 23: Uma introdução ao framework Spring

AOPAOP

public class MessageDecorator implements MethodInterceptor {

public Object invoke(MethodInvocation invocation) throws Throwable {

System.out.println(“Hello ”); invocation.proceed(); System.out.println(“!”); return retVal; }

}

Page 24: Uma introdução ao framework Spring

AOPAOP

public class HelloWorldAOPExample { public static void main(String args[]) { MessageWriter target = new MessageWriter();

ProxyFactory pf = new ProxyFactory(); pf.addAdvice(new MessageDecorator()); pf.setTarget(target); MessageWriter proxy = (MessageWriter)pf.getProxy();

target.writeMessage(); proxy.writeMessage(); }}

Page 25: Uma introdução ao framework Spring

Acesso a DadosAcesso a Dados

Acesso a Dados com Spring

Page 26: Uma introdução ao framework Spring

Acesso a DadosAcesso a Dados

Spring com JDBC

• Gerenciamento de DataSources

• JDBC Templates

• SQLExceptionTranslator

Page 27: Uma introdução ao framework Spring

Acesso a DadosAcesso a Dados

Page 28: Uma introdução ao framework Spring

Acesso a DadosAcesso a Dados

Gerenciamento de DataSources

<bean id=”dataSource” class=”org.springframework.jndi.JndiObjectFactoryBean”>

<property name=”jndiName”> <value>java:comp/env/jdbc/meuDataSource</value> </property></bean>

<bean id=”meuDAO” class=”net.java.dev.javarn.dao.MeuDAO”> <property name=”dataSource”> <ref local=”dataSource”/> </property></bean>

Page 29: Uma introdução ao framework Spring

Acesso a DadosAcesso a Dados

JDBC Templates

• Facilita a execução de consultas

• Torna o código mais limpo

Page 30: Uma introdução ao framework Spring

Acesso a DadosAcesso a Dados

int count = 0;try { PreparedStatement st = getConnection(). prepareStatement(“select count(*) from produto”); ResultSet rs = st.executeQuery(); if (rs.next()) count = rs.getInt(1);} catch(SQLException e) {

log.error(e);} finally { try { if (stmt != null) stmt.close(); } catch(SQLException e) { log.warn(e); } try { if (conn != null) conn.close(); } catch(SQLException e) { log.warn(e); }}

Page 31: Uma introdução ao framework Spring

Acesso a DadosAcesso a Dados

JdbcTemplate jt = new JdbcTemplate(getDataSource());int count = jt.queryForInt( “select count(*) from produto”);

Page 32: Uma introdução ao framework Spring

Acesso a DadosAcesso a Dados

<bean id="jdbcTemplate"

class="org.springframework.jdbc.core.JdbcTemplate">

<property name="dataSource">

<ref bean="dataSource"/>

</property>

</bean>

<bean id="studentDao" class="StudentDaoJdbc">

<property name="jdbcTemplate">

<ref bean="jdbcTemplate"/>

</property>

</bean>

Page 33: Uma introdução ao framework Spring

Acesso a DadosAcesso a Dados

SQLExceptionTranslator

SQLException

BadSqlGrammarException

CannotGetJdbcConnectionException

InvalidResultSetAccessException

IncorrectResultSetColumnCountException

...

Page 34: Uma introdução ao framework Spring

Acesso a DadosAcesso a Dados

Spring com Hibernate

• Gerenciamento de Session Factories

• Hibernate DAO Support

Page 35: Uma introdução ao framework Spring

Acesso a DadosAcesso a Dados

Gerenciamento de Session Factories<bean id=”dataSource” ... />

<bean id=”sessionFactory” class=”org.springframework.orm.hibernate3.LocalSessionFactoryBean”>

<property name=”dataSource”><ref local=”dataSource”/></property> <property name=”hibernateProperties”> <props><prop key=”hibernate.dialect”> org.hibernate.dialect.PostgreSQLDialect </prop></props> </property> <property name=”mappingResources”> <list> <value>Bean1.hbm.xml</value> <value>Bean2.hbm.xml</value> </list> </property> ...

Page 36: Uma introdução ao framework Spring

Acesso a DadosAcesso a Dados

Hibernate DAO Supportpublic class AlunoDao extends HibernateDaoSupport implements Dao { public Object get(int id) { return getHibernateTemplate().load(Aluno.class, id); } public List getAll() { return getHibernateTemplate().loadAll(Aluno.class); } public void saveOrUpdate(Object o) { getHibernateTemplate().saveOrUpdate(o); } public List findAlunosReprovados() { return getHibernateTemplate().find(“from Aluno a where

a.disciplinas.media < ?”, new Object[] { 7 }); }

}

Page 37: Uma introdução ao framework Spring

Acesso a DadosAcesso a Dados

<bean id="sessionFactory" .../>

<bean id="dao" class="net.java.dev.javarn.TestDao"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property></bean>

Page 38: Uma introdução ao framework Spring

Gerenciamento de TransaçõesGerenciamento de Transações

Page 39: Uma introdução ao framework Spring

Gerenciamento de TransaçõesGerenciamento de Transações

@Transactionalpublic interface FooService {

Foo getFoo(String fooName);

void insertFoo(Foo foo);

void updateFoo(Foo foo);}

Page 40: Uma introdução ao framework Spring

Gerenciamento de TransaçõesGerenciamento de Transações

public class FooService {

public Foo getFoo(String fooName) { ... }

@Transactional(propagation = Propagation.REQUIRES_NEW)

public void updateFoo(Foo foo) { // ... }}

Page 41: Uma introdução ao framework Spring

Spring na WebSpring na Web

Integração com Frameworks

• Spring + Spring MVC• Spring + Java Server Faces• Spring + Webwork• Spring + Tapestry• Spring + Struts

Page 42: Uma introdução ao framework Spring

Spring na WebSpring na Web

Spring Web Flow

• Controle de fluxo de aplicações web

• Continuations

• Problema do botão voltar (back x undo)

Page 43: Uma introdução ao framework Spring

Spring na WebSpring na Web

/step1.do

Controller 1 HTTPSession

storeForm

page1

/step2.do

Controller 2page2

updateForm

/lastStep.do

Controller 3confirmationPage

processTxBusinessService

Page 44: Uma introdução ao framework Spring

Spring na WebSpring na Web

Page 45: Uma introdução ao framework Spring

Spring na WebSpring na Web

• Fluxo como uma máquina de estados

• Estados e transições configurados com XML

• Atualmente compatível com Spring MVC e Java Server Faces

• Suporte a AJAX

Page 46: Uma introdução ao framework Spring

Spring no DesktopSpring no Desktop

Spring RCP

• Rich Client Platform

• Programação Desktop com o poder do Spring

• Suporte a Swing, inicialmente

Page 47: Uma introdução ao framework Spring

Spring no DesktopSpring no Desktop

Spring RCP – Form BuildersFormModelformModel= new DefaultFormModel(newCustomer());TableFormBuilderbuilder = new TableFormBuilder(formModel);builder.addSeparator("separator.contactDetails");builder.row();builder.add("name");builder.row();builder.add("orgPosition");builder.row();builder.add("orgName");builder.row();builder.addSeparator("separator.addressDetails");…builder.add("state");builder.add("postcode","colSpec=2cm");builder.row();builder.add("country");JComponentform = builder.getForm();

Page 48: Uma introdução ao framework Spring

Spring no DesktopSpring no Desktop

Page 49: Uma introdução ao framework Spring

RemotingRemoting

Sistemas Distribuídos com Spring

• Spring + EJBs

• Spring + RMI

• Spring + JAXRPC (Web Services)

• Spring HTTP Invoker

Page 50: Uma introdução ao framework Spring

Spring 2.0Spring 2.0

Novidades do Spring 2.0

• XML mais simples e poderoso (XML Schema)

• Mais uso de Annotations

• Convention over configuration

• Múltiplas linguagens (Java, Groovy, Jruby, BeanShell)

Page 51: Uma introdução ao framework Spring

Spring AnnotationSpring Annotation

Spring Annotation

• Configuração com Annotations

• Integração com JSF

• Brasileiro

http://spring-annotation.dev.java.net/

Page 52: Uma introdução ao framework Spring

LivrosLivros

Page 53: Uma introdução ao framework Spring

Dúvidas?Dúvidas?

[email protected]

www.jeebrasil.com.brdel.icio.us/davidrvp