O documento apresenta uma palestra sobre o framework Spring, discutindo sua evolução, principais recursos como injeção de dependência, beans, aspectos, acesso a dados e segurança. O Spring fornece diversos módulos para criar aplicações Java robustas de forma desacoplada e flexível.
2. Bemobi Tech Tal k
Agenda
Dat a: 11/01/2013
• Spring Framework
• Evolução
• Bla bla Bla
• Chicken
• Beans
• Configurações via XML e Anotações
• Aspectos
• Banco de Dados
• Configurações
• Gerenciamento de Transações
• Bla Bla Bla
• Chicken
• Bla Bla Bla
4. Bemobi Tech Tal k Dat a: 11/01/2013
Visão geral – versão 3.2.x
Spring Framework
• Primeira versão milestone version em 2004
• Módulos:
• Container IoC
• Aspectos
• Acesso a Dados
• Controle de Transações
• MVC
• Convention over Configuration
• Batch
• Integração entre sistemas
• Autenticação e Autorização
• JMX
• Messaging
• Testes
5. Bemobi Tech Tal k Dat a: 11/01/2013
Evolução do framework
Adaptado de http://www.flickr.com/photos/mraible/4378559350/sizes/o/in/photostream/
6. Adoção (Top 20 frameworks na JVM)
Di gi t e o nome do Proj et o Dat a:
Pesquisa InfoQ de Out/2012 - http://www.infoq.com/research/jvm-web-frameworks
7. Bemobi Tech Tal k
Spring Beans
Dat a: 11/01/2013
• Apesar do termo “bean” ou “java bean”, não há relação com as JSR
220/273/345 e são apenas definições de componentes
• POJOs
9. • Criados por xml com <bean id=“goku”>
• Via código com @Bean em um método que retorne uma instância de
“Heroi”
• Escopos Singleton(default), prototype, request, session, global-session
(portlets)
Spring Beans
Bemobi Tech Tal k Dat a: 11/01/2013
10. • Implementação da JSR 250 – Métodos para @PostContruct e
@PreDestroy
Spring Beans – Ciclo de Vida
Todas as fases do ciclo de vida de um bean
Bemobi Tech Tal k Dat a: 11/01/2013
11. Aspectos
• Ainda que DI nos deixe amarrar nossos componentes de maneira
desacoplada, aspectos nos deixam capturar funcionalidades que são
usadas por todos os componentes da aplicação
• Evita duplicação de código e elimina boa parte de bolierplate codding
Funcionalidades como logging, segurança e gerenciamento de transações são exemplos
para aspectos
Bemobi Tech Tal k Dat a: 11/01/2013
12. Container
• Dois tipos distintos: Bean Factory e Application Contexts
• Usa-se Application Context, uma vez que são mais completos e contém
abstrações para mensagens de texto, publicação de eventos etc.
Container Spring, responsável por criar, relacionar e gerenciar nossos beans
Bemobi Tech Tal k Dat a: 11/01/2013
13. Minimizando o uso de XML
• Autowiring em quatro opções: byName, byType, ConstructorBased,
autoDetect (tenta CB e byType respectivamente)
• Três anotações: @Autowired e @Inject (JSR 330) e @Resource (JSR
250)
• Beans de mesmo tipo? Use @Qualifier (autowired) e @Name (inject)
• @Inject pode injetar Providers, factory methods que só devolvem a
instância ao ter o método GET chamado
• Auto discovery via <context:component-scan> ou @ComponentScan
(Spring 3.1+)
Bemobi Tech Tal k Dat a: 11/01/2013
14. Spring e acesso a Banco de Dados
• A partir do Spring 3, temos suporte ao Hibernate 4
• JPA sem persistence.xml
• JDBC com JDBCTemplate
• DAO e Repositories, filosofia Spring de acesso a dados (Spring Data)
• Exceções independentes de plataforma (CannotAcquireLockException ,
CannotSerializeTransactionException, CleanupFailureDataAccessException, ConcurrencyFailureException DataAccessException,
DataAccessResourceFailureException DataIntegrityViolationException, DataRetrievalFailureException DeadlockLoserDataAccessException
…)
• DataSource e Pooling
Bemobi Tech Tal k Dat a: 11/01/2013
15. Gerenciando Transações
• Suporte a JDBC, JPA e JTA
• Um transactionManager para cada tipo de acesso a dados (JDBC, JPA,
JMS etc)
• Via XML com <tx:advice id="txAdvice"> ou @Transactional
• Para uso das anotações basta usar <tx:annotation-driven /> ou
@EnableTransactionManagement
Bemobi Tech Tal k Dat a: 11/01/2013
16. Usando Spring MVC
• Controllers são POJO’s
• XML ou anotações
• Diferentes ViewResolvers para diferentes saidas (xml, wap, web, pdf etc)
• HandlerMapping ajuda a escolher qual controle será acionado (perfeito
para decisões de device no nosso caso)
Bemobi Tech Tal k Dat a: 11/01/2013
Passos pelo qual um request é submetido até que o
response seja entregue ao usuário
17. WebFlow
• Somente via XML
• Cria fluxos de UI em MVC, JSF etc
• Adiciona escopo de conversação
• Caso o processo seja apenas procedural não envolvendo UI, usar o
commons-chains da apache (vide Subscription Novo)
Bemobi Tech Tal k Dat a: 11/01/2013
18. Segurança
• Feito através do módulo Spring Security
• Oito módulos: ACL, CAS, Configuration, Core, LDAP, OpenID, Web e Tag
Libs
• ServletFilter org.springframework.web.filter.DelegatingFilterProxy
• Sete tipos de autenticação prontos: em memória, JDBC, LDAP, OpenID,
CAS, X.509 e JAAS providers
• Anotações @Secured (Spring) ou da JSR-250 @RolesAllowed (para
isso, devemos usar <global-method-security jsr250-
annotations="enabled" /> )
Bemobi Tech Tal k Dat a: 11/01/2013
19. E mais:
• Chamadas remotas com RMI, HTTP, JAX-WS e JAX-RS
• REST através do Spring MVC com anotações de
@RequestMapping, @ResponseStatus
• Desenvolvimento JMS com POJO’s e implementações de conectores
para os principais serviços de mensageria
• Acesso aos beans do Spring via JMX usando apenas
@ManagedResource e @ManagedAttribute
• Abstração de variáveis de ambientes e properties através do
Environment
• Perfis de beans (DEV, PROD)
• Suporte a JSR-107 – JCache
• Suporte a JSR-349 – Bean Validation
Bemobi Tech Tal k Dat a: 11/01/2013
2000 - J2SE v1.3 , J2EE v1.2.1 EJB 2 = - difficult deployment descriptors , - difficult testing , - lot of redundant artifacts 2001 - J2SE v1.3 2003 - J2SE v1.4, J2EE v1.4 2004 - Spring v1.0 First Spring Framework - dependency injection (IoP), - competitor to J2EE 2006 - J2SE v5, Java EE v5, Spring v2.0, Java EE 5 (EJB 3.0) - a lot of functions inspired by Spring , - elimination of component, home and remote interfaces 2007 - Spring v2.5 Full Java 6 and Java EE 5 support (JDBC 4.0, JTA 1.1, JavaMail 1.4, JAX-WS 2.0), Full-featured annotation-driven dependency injection, including support for 'qualifiers‘ 2009 - Java SE v6, Java EE v6, Spring v3.0, Java EE 6 (EJB 3.1) = - interfaces are optional , - singleton beans , - cron-like scheduling , - embeddable containers , Spring 3.0 = - Spring Expression Language , - MVC-Framework with improved REST support 2011 - Java SE v 7, Spring v 3.1 = Cache Abstraction, Bean Profiles, Configuration Anotations Environment absctracton, Suporte HIB 4, JPA Persistence sem o persistence.xml 2012 – Spring 3.2 goes GA = Refined Java SE 7 support , * Concurrency refinements across the framework , avoiding the use of synchronization wherever possible – in particular for scoped/prototype beans * Allowing for @Autowired and @Value to be used as meta-annotations , e.g. to build custom injection annotations in combination with specific qualifiers * Support for custom @Bean definition annotations in @Configuration classes , e.g. in combination with specific qualifiers, @Lazy, @Primary, etc * Support for loading WebApplicationContexts in the TestContext framework , and further improvements for web application testing * Early support for JCache 0.5 (JSR-107) as a backend for Spring's cache abstraction