3. O que é Spring?
• Reduzir a complexidade do
desenvolvimento Java EE
• Simplificar sem perder o poder
• Facilitar o desenvolvimento usando as boas
práticas
4. 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
6. O que é Spring?
Spring influenciou...
– EJB 3.0
– Java Server Faces
7. 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
8. Injeçã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)
11. Injeção de Dependências
Injeção de Dependências
Inversion of Control Containers
and The Dependency Injection
Pattern
http://www.martinfowler.com/articles/injection.html
Martin Fowler
13. Injeçã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();
}
}
14. Injeção de Dependências
Com Dependency Lookup
public class Bean1 {
private Bean2 bean2;
public void metodo() {
bean2 = Factory.getBean2(); // Factory (GoF)
bean2.usandoBean();
}
}
15. Injeçã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;
}
}
16. Injeção de Dependências
Dois tipos...
– Setter Injection
– Constructor Injection
Spring trabalha com ambos!
36. Acesso a Dados
Hibernate DAO Support
public 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 });
}
}
37. Acesso a Dados
<bean id=quot;sessionFactoryquot; .../>
<bean id=quot;daoquot; class=quot;net.java.dev.javarn.TestDaoquot;>
<property name=quot;sessionFactoryquot;>
<ref bean=quot;sessionFactoryquot; />
</property>
</bean>
40. Gerenciamento de Transações
public class FooService {
public Foo getFoo(String fooName) { ... }
@Transactional(propagation =
Propagation.REQUIRES_NEW)
public void updateFoo(Foo foo) {
// ...
}
}
41. Spring na Web
Integração com Frameworks
• Spring + Spring MVC
• Spring + Java Server Faces
• Spring + Webwork
• Spring + Tapestry
• Spring + Struts
42. Spring na Web
Spring Web Flow
• Controle de fluxo de aplicações web
• Continuations
• Problema do botão voltar (back x undo)
43. Spring na Web
/step1.do
storeForm
page1
Controller 1 HTTP
Session
/step2.do
updateForm
page2
Controller 2
/lastStep.do
Business
Service
processTx
confirmationPage
Controller 3
45. Spring 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
46. Spring no Desktop
Spring RCP
• Rich Client Platform
• Programação Desktop com o poder do
Spring
• Suporte a Swing, inicialmente
47. Spring no Desktop
Spring RCP – Form Builders
FormModelformModel= new DefaultFormModel(newCustomer());
TableFormBuilderbuilder = new TableFormBuilder(formModel);
builder.addSeparator(quot;separator.contactDetailsquot;);
builder.row();
builder.add(quot;namequot;);
builder.row();
builder.add(quot;orgPositionquot;);
builder.row();
builder.add(quot;orgNamequot;);
builder.row();
builder.addSeparator(quot;separator.addressDetailsquot;);
…
builder.add(quot;statequot;);
builder.add(quot;postcodequot;,quot;colSpec=2cmquot;);
builder.row();
builder.add(quot;countryquot;);
JComponentform = builder.getForm();
49. Remoting
Sistemas Distribuídos com Spring
• Spring + EJBs
• Spring + RMI
• Spring + JAXRPC (Web Services)
• Spring HTTP Invoker
50. Spring 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)
51. Spring Annotation
Spring Annotation
• Configuração com Annotations
• Integração com JSF
• Brasileiro
http://spring-annotation.dev.java.net/