SlideShare uma empresa Scribd logo
Introdução ao Spring
     Framework
Natanael Fonseca
Arquiteto de Software
Ementa
• O que é o Spring Framework ?
• O que são POJOS ?
• Inversão de Controle;
• Injeção de dependência;
• Módulos do Spring;
• Cenários de uso com Spring;
• Configurando o projeto;
O que é ?

• Fornece uma infra-estrutura completa de
  componentes que se integram facilmente
  com sua aplicação, deixando você livre para
  programar apenas suas regras de negócio.
• No seu core, existe um container de Ioc.
POJOS
•   Acrônimo para “Plain Old Java Object”;

•   Termo estabelecido por Martin Fowler, Rebecca Parsons e John Mackenzie
    em 2005;

•   Denota o desenvolvimento da lógica de negócio em Objetos Java definidos a
    partir de classes ordinárias sem o uso especifico de um modelo de
    componentização, em especial sem o uso de EJBs.

•   Portanto, o Spring sugere o uso de “JavaBeans” para a definição dos objetos
    da aplicação, criando um modelo de componentes simples e sem o uso de
    EJBs;
Inversão de Controle

• Normalmente o “controle” sobre o
  software em execução fica a cargo do
  próprio programador, contudo, quando em
  alguns trechos o controle é passado para
  outro componente(Container), dizemos
  que houve uma inversão de
  controle(Inversão de responsabilidades).
Injeção de dependência
•   A injeção de dependência é um design
    pattern que visa desacoplar os componentes
    da aplicação.


•   Os componentes são instanciados
    externamente a classe.


•   Um gerenciador controla essas instancias.


•   Os componentes tem dependências entre si.


•   Esse gerenciador, através de uma
    configuração, liga os componentes de forma
    a montar a aplicação.
Módulos do Spring
Cenários de Uso
• Dando suporte completo a uma aplicação
  JEE(Transação, Acesso a dados, Serviços e
  etc.);
• Se integrando a algum framework Web, tal
  como: Struts, JSF e etc. Para acesso a infra-
  estrutura do Spring;
• Servindo como ponte para a conexão entre
  diversas aplicações.Via Web Services, por
  exemplo;
Configurando o Projeto
• Basta baixar os “Jars” do spring, disponíveis
   em:
  • http://www.springsource.org/spring-community-download
• Ou se você estiver usando um Gerenciador
  de dependência, como o Maven, basta
  consultar:
  •   http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/
      overview.html#d0e6
Exemplo

Imagine o cenário ao lado. Sem
o uso de Spring, teríamos um
código semelhante a este:
ComponenteC componenteC = new ComponenteC();
	     	
Servico servico = new Servico();
ComponenteB componenteB = new ComponenteB();
componenteB.setServico( servico );
	     	
ComponentA componentA = new ComponentA();
componentA.setComponenteB( componenteB );
componentA.setComponenteC( componenteC );
	
/*
   O que acontece acima é a injeção manual pelo próprio programador
das instancias que os respectivos componentes dependem via método set. */
Exemplo
     Com spring, basta declarar os beans e fazer uso da
     injeção de dependência fornecida pelo mesmo.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-
beans.xsd">

	    <bean id="compA" class="com.blogspot.training.spring.ComponenteA">
	    	    <property name="componenteB" ref="compB"/>
	    	    <property name="componenteC" ref="compC"/>
	    </bean>

	    <bean id="compB" class="com.blogspot.training.spring.ComponenteB">
	    	    <property name="servico" ref="servico"/>
	    </bean>
	
	    <bean id="compC" class="com.blogspot.training.spring.ComponenteC"/>
	
	    <bean id="servico" class="com.blogspot.training.spring.Servico"/>
	
</beans>
Exemplo
Como resultado final, temos a “Inversão de controle”
de criação das instancias que agora são gerenciadas
pelo Spring, ou seja, basta solicitarmos o componenteA
que o mesmo já vem com todas as suas dependências
preenchidas.
public static void main(String[] args) {
	    	
	    Resource resource = new ClassPathResource("applicationContext.xml");
	    BeanFactory factory = new XmlBeanFactory( resource );
	    	
	    ComponenteA componentA = (ComponenteA) factory.getBean( "compA" );
	    	
	    System.out.println( componentA );
	    System.out.println( componentA.getComponenteB() );
	    System.out.println( componentA.getComponenteB().getServico() );
	    	
}
BeanFactory
• Fábrica de Objetos responsável por realizar
  a inversão de controle (Ioc) na injeção de
  dependências dos objetos instanciados e
  solicitados por uma aplicação.
• Substitui o operador “new” da linguagem
  java, deixando a cargo do Spring controlar a
  criação das instancias.
BeanFactory
•   Possui diversos métodos para
    obter uma instancia de
    determinado objeto;

•   Pode-se usar o “id” lógico
    fornecido no XML ou ainda o
    tipo da classe .class;

•   Um implementação simples é a
    classe XMLBeanFactory que
    utiliza um arquivo XML para a
    definição dos beans;
Interface Resource
•   Interface que abstrai a origem do arquivo XML,
    esta possui diversas implementações, por exemplo:

    •   ClassPathResource

    •   ServletContainerResource

    •   URLResource

    •   FileSystemResource

    •   InputStreamResource

    •   PortletResource
Beans Singleton
Por padrão, todos os beans são “Singleton”, mas caso
queira explicitar, basta colocar “Scope=Singleton”,
conforme exemplo abaixo:
<bean id="compC" class="com.blogspot.training.spring.ComponenteC" scope="singleton" />




Fazendo isso, ao se tentar obter 5 instancias de
compC, obteremos sempre as mesmas :
for (int i = 0; i < 5; i++) {
	    ComponenteC componentC = (ComponenteC) factory.getBean("compC");
	    System.out.println(componentC);
}

Resultado no console:

com.blogspot.training.spring.ComponenteC@679bfb30
com.blogspot.training.spring.ComponenteC@679bfb30
com.blogspot.training.spring.ComponenteC@679bfb30
com.blogspot.training.spring.ComponenteC@679bfb30
com.blogspot.training.spring.ComponenteC@679bfb30
Beans Prototype
Caso queira que o spring retorne sempre instancias
novas, basta alterar o atributo scope para
“prototype”.
<bean id="compC" class="com.blogspot.training.spring.ComponenteC" scope="prototype" />




Fazendo isso, ao se tentar obter 5 instancias de
compC, obteremos instancias diferentes :
for (int i = 0; i < 5; i++) {
	    ComponenteC componentC = (ComponenteC) factory.getBean("compC");
	    System.out.println(componentC);
}

Resultado no console:

com.blogspot.training.spring.ComponenteC@5097eded
com.blogspot.training.spring.ComponenteC@26858bf1
com.blogspot.training.spring.ComponenteC@9a68ef9
com.blogspot.training.spring.ComponenteC@15f48262
com.blogspot.training.spring.ComponenteC@679bfb30
ApplicationContext
• Estende BeanFactory adicionando novas
  funcionalidades e provendo características
  JEE como, por exemplo:
 • Suporte a AOP;
 • Internacionalização;
 • Propagação de Eventos;
 • Dentre outras;
ApplicationContext

•   Existem diversas implementações de
    ApplicationContext. Em suma, podemos utilizar
    ClasspathXMLApplicationContext para
    indicar que iremos ler o XML do classpath da
    aplicação.
    public static void main(String[] args) {

    	    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    	    	
    	    ComponenteA compA = (ComponenteA) ctx.getBean("compA");

    	    System.out.println( compA );
    	    	
    }
Referencias

• Spring Framework Reference
  •   http://static.springsource.org/spring/docs/3.1.x/spring-framework-
      reference/html/




• Spring in Action, Terceira Edição
  de Craig Walls.

Mais conteúdo relacionado

Mais procurados

Polimorfismo em java
Polimorfismo em javaPolimorfismo em java
Polimorfismo em java
Manoel Afonso
 
Junções e subconsultas
Junções e subconsultasJunções e subconsultas
Junções e subconsultas
julianaveregue
 
Spring framework Controllers and Annotations
Spring framework   Controllers and AnnotationsSpring framework   Controllers and Annotations
Spring framework Controllers and Annotations
Anuj Singh Rajput
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
Elaine Cecília Gatto
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Helder da Rocha
 
Diagramas de componentes
Diagramas de componentesDiagramas de componentes
Diagramas de componentes
Portal_do_estudante_ADS
 
Apresentação angular js
Apresentação angular jsApresentação angular js
Apresentação angular js
Raphael Ramos Monteiro
 
Java Web, o Tutorial
Java Web, o TutorialJava Web, o Tutorial
Java Web, o Tutorial
Rildo (@rildosan) Santos
 
Spring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topicsSpring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topics
Guy Nir
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework spring
Antoine Rey
 
Spring core module
Spring core moduleSpring core module
Spring core module
Raj Tomar
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
Emprovise
 
Introduction to Spring Framework and Spring IoC
Introduction to Spring Framework and Spring IoCIntroduction to Spring Framework and Spring IoC
Introduction to Spring Framework and Spring IoC
Funnelll
 
Diagrama de Atividades - UML
Diagrama de Atividades - UMLDiagrama de Atividades - UML
Diagrama de Atividades - UML
Vinícius Barros
 
JAVA - Herança
JAVA - HerançaJAVA - Herança
JAVA - Herança
Elaine Cecília Gatto
 
Spring Web MVC
Spring Web MVCSpring Web MVC
Spring Web MVC
zeeshanhanif
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
Armando Daniel
 
Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
Edmilson Filho
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
Tchelinux
 
Arquitetura do Framework Spring
Arquitetura do Framework SpringArquitetura do Framework Spring
Arquitetura do Framework Spring
Alexsandro Oliveira
 

Mais procurados (20)

Polimorfismo em java
Polimorfismo em javaPolimorfismo em java
Polimorfismo em java
 
Junções e subconsultas
Junções e subconsultasJunções e subconsultas
Junções e subconsultas
 
Spring framework Controllers and Annotations
Spring framework   Controllers and AnnotationsSpring framework   Controllers and Annotations
Spring framework Controllers and Annotations
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
 
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
Curso de RESTful WebServices em Java com JAX-RS (Java EE 7)
 
Diagramas de componentes
Diagramas de componentesDiagramas de componentes
Diagramas de componentes
 
Apresentação angular js
Apresentação angular jsApresentação angular js
Apresentação angular js
 
Java Web, o Tutorial
Java Web, o TutorialJava Web, o Tutorial
Java Web, o Tutorial
 
Spring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topicsSpring 3.x - Spring MVC - Advanced topics
Spring 3.x - Spring MVC - Advanced topics
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework spring
 
Spring core module
Spring core moduleSpring core module
Spring core module
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
Introduction to Spring Framework and Spring IoC
Introduction to Spring Framework and Spring IoCIntroduction to Spring Framework and Spring IoC
Introduction to Spring Framework and Spring IoC
 
Diagrama de Atividades - UML
Diagrama de Atividades - UMLDiagrama de Atividades - UML
Diagrama de Atividades - UML
 
JAVA - Herança
JAVA - HerançaJAVA - Herança
JAVA - Herança
 
Spring Web MVC
Spring Web MVCSpring Web MVC
Spring Web MVC
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
Princípios SOLID
Princípios SOLIDPrincípios SOLID
Princípios SOLID
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
 
Arquitetura do Framework Spring
Arquitetura do Framework SpringArquitetura do Framework Spring
Arquitetura do Framework Spring
 

Semelhante a Introdução ao Spring Framework

J2EE Na Vida Real
J2EE Na Vida RealJ2EE Na Vida Real
J2EE Na Vida Real
elliando dias
 
Como utilizar Spring boot em suas aplicações
Como utilizar Spring boot em suas aplicaçõesComo utilizar Spring boot em suas aplicações
Como utilizar Spring boot em suas aplicações
lehsantoslucena
 
Introdução a AOP + SpringAOP
Introdução a AOP + SpringAOPIntrodução a AOP + SpringAOP
Introdução a AOP + SpringAOP
elliando dias
 
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
Dextra Sistemas / Etec Itu
 
Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...
Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...
Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...
Fernando Godóy
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizados
Diego Santos
 
Palestra
PalestraPalestra
Spring: uma introdução prática
Spring: uma introdução práticaSpring: uma introdução prática
Spring: uma introdução prática
José Barros
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
elliando dias
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.
Vinícius de Paula
 
Desafio Rest API
Desafio Rest APIDesafio Rest API
Desafio Rest API
Reinaldo Junior
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
Diego Pacheco
 
Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVC
Michael Costa
 
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & HudsonSuporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Ricardo Ferreira
 
Spring & Struts
Spring & StrutsSpring & Struts
Spring & Struts
eduan
 
Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018
André Luiz Forchesatto
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
Rafael Benevides
 
Desenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-endDesenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-end
Giovanny Valente
 
CDI -Contextos e Dependências
CDI -Contextos e DependênciasCDI -Contextos e Dependências
CDI -Contextos e Dependências
Wende Mendes
 
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Daniel Makiyama
 

Semelhante a Introdução ao Spring Framework (20)

J2EE Na Vida Real
J2EE Na Vida RealJ2EE Na Vida Real
J2EE Na Vida Real
 
Como utilizar Spring boot em suas aplicações
Como utilizar Spring boot em suas aplicaçõesComo utilizar Spring boot em suas aplicações
Como utilizar Spring boot em suas aplicações
 
Introdução a AOP + SpringAOP
Introdução a AOP + SpringAOPIntrodução a AOP + SpringAOP
Introdução a AOP + SpringAOP
 
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
VSSUMMIT 2023 - Como partir do zero e entregar uma API Profissional com .NET ...
 
Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...
Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...
Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizados
 
Palestra
PalestraPalestra
Palestra
 
Spring: uma introdução prática
Spring: uma introdução práticaSpring: uma introdução prática
Spring: uma introdução prática
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.
 
Desafio Rest API
Desafio Rest APIDesafio Rest API
Desafio Rest API
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVC
 
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & HudsonSuporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
 
Spring & Struts
Spring & StrutsSpring & Struts
Spring & Struts
 
Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Desenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-endDesenvolvendo aplicações com Angular e Laravel no Back-end
Desenvolvendo aplicações com Angular e Laravel no Back-end
 
CDI -Contextos e Dependências
CDI -Contextos e DependênciasCDI -Contextos e Dependências
CDI -Contextos e Dependências
 
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
 

Mais de Natanael Fonseca

Microservices With Istio Service Mesh
Microservices With Istio Service MeshMicroservices With Istio Service Mesh
Microservices With Istio Service Mesh
Natanael Fonseca
 
Microservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixMicroservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud Netflix
Natanael Fonseca
 
Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Curso Java Básico - Aula 05
Curso Java Básico - Aula 05
Natanael Fonseca
 
Aula05
Aula05Aula05
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04
Natanael Fonseca
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
Natanael Fonseca
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
Natanael Fonseca
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
Natanael Fonseca
 
Desafios de projeto para quem usa a plataforma Android
Desafios de projeto para quem usa a plataforma AndroidDesafios de projeto para quem usa a plataforma Android
Desafios de projeto para quem usa a plataforma Android
Natanael Fonseca
 
Fragmentos
FragmentosFragmentos
Fragmentos
Natanael Fonseca
 
Atividades e Intenções (Android)
Atividades e Intenções (Android)Atividades e Intenções (Android)
Atividades e Intenções (Android)
Natanael Fonseca
 
Introdução à plataforma Android
Introdução à plataforma AndroidIntrodução à plataforma Android
Introdução à plataforma Android
Natanael Fonseca
 
Certificados Digitais x509
Certificados Digitais x509Certificados Digitais x509
Certificados Digitais x509
Natanael Fonseca
 
Certificados Digitais x509
Certificados Digitais x509Certificados Digitais x509
Certificados Digitais x509
Natanael Fonseca
 
Infra Estrutura de Chaves Publicas(PKI)
Infra Estrutura de Chaves Publicas(PKI)Infra Estrutura de Chaves Publicas(PKI)
Infra Estrutura de Chaves Publicas(PKI)
Natanael Fonseca
 
Introdução a criptografia
Introdução a criptografiaIntrodução a criptografia
Introdução a criptografia
Natanael Fonseca
 
Transações em EJB
Transações em EJBTransações em EJB
Transações em EJB
Natanael Fonseca
 
Java annotation
Java annotationJava annotation
Java annotation
Natanael Fonseca
 
Validação de certificados digitais
Validação de certificados digitaisValidação de certificados digitais
Validação de certificados digitais
Natanael Fonseca
 

Mais de Natanael Fonseca (19)

Microservices With Istio Service Mesh
Microservices With Istio Service MeshMicroservices With Istio Service Mesh
Microservices With Istio Service Mesh
 
Microservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixMicroservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud Netflix
 
Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Curso Java Básico - Aula 05
Curso Java Básico - Aula 05
 
Aula05
Aula05Aula05
Aula05
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
Desafios de projeto para quem usa a plataforma Android
Desafios de projeto para quem usa a plataforma AndroidDesafios de projeto para quem usa a plataforma Android
Desafios de projeto para quem usa a plataforma Android
 
Fragmentos
FragmentosFragmentos
Fragmentos
 
Atividades e Intenções (Android)
Atividades e Intenções (Android)Atividades e Intenções (Android)
Atividades e Intenções (Android)
 
Introdução à plataforma Android
Introdução à plataforma AndroidIntrodução à plataforma Android
Introdução à plataforma Android
 
Certificados Digitais x509
Certificados Digitais x509Certificados Digitais x509
Certificados Digitais x509
 
Certificados Digitais x509
Certificados Digitais x509Certificados Digitais x509
Certificados Digitais x509
 
Infra Estrutura de Chaves Publicas(PKI)
Infra Estrutura de Chaves Publicas(PKI)Infra Estrutura de Chaves Publicas(PKI)
Infra Estrutura de Chaves Publicas(PKI)
 
Introdução a criptografia
Introdução a criptografiaIntrodução a criptografia
Introdução a criptografia
 
Transações em EJB
Transações em EJBTransações em EJB
Transações em EJB
 
Java annotation
Java annotationJava annotation
Java annotation
 
Validação de certificados digitais
Validação de certificados digitaisValidação de certificados digitais
Validação de certificados digitais
 

Último

Aula combustiveis mais utilizados na indústria
Aula combustiveis mais utilizados na indústriaAula combustiveis mais utilizados na indústria
Aula combustiveis mais utilizados na indústria
zetec10
 
Apresentação sobre Deep Web e anonimização
Apresentação sobre Deep Web e anonimizaçãoApresentação sobre Deep Web e anonimização
Apresentação sobre Deep Web e anonimização
snerdct
 
Ferramentas que irão te ajudar a entrar no mundo de DevOps/CLoud
Ferramentas que irão te ajudar a entrar no mundo de   DevOps/CLoudFerramentas que irão te ajudar a entrar no mundo de   DevOps/CLoud
Ferramentas que irão te ajudar a entrar no mundo de DevOps/CLoud
Ismael Ash
 
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docxse38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
ronaldos10
 
Subindo uma aplicação WordPress em docker na AWS
Subindo uma aplicação WordPress em docker na AWSSubindo uma aplicação WordPress em docker na AWS
Subindo uma aplicação WordPress em docker na AWS
Ismael Ash
 
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
Faga1939
 

Último (6)

Aula combustiveis mais utilizados na indústria
Aula combustiveis mais utilizados na indústriaAula combustiveis mais utilizados na indústria
Aula combustiveis mais utilizados na indústria
 
Apresentação sobre Deep Web e anonimização
Apresentação sobre Deep Web e anonimizaçãoApresentação sobre Deep Web e anonimização
Apresentação sobre Deep Web e anonimização
 
Ferramentas que irão te ajudar a entrar no mundo de DevOps/CLoud
Ferramentas que irão te ajudar a entrar no mundo de   DevOps/CLoudFerramentas que irão te ajudar a entrar no mundo de   DevOps/CLoud
Ferramentas que irão te ajudar a entrar no mundo de DevOps/CLoud
 
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docxse38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
se38_layout_erro_xxxxxxxxxxxxxxxxxx.docx
 
Subindo uma aplicação WordPress em docker na AWS
Subindo uma aplicação WordPress em docker na AWSSubindo uma aplicação WordPress em docker na AWS
Subindo uma aplicação WordPress em docker na AWS
 
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
INTELIGÊNCIA ARTIFICIAL + COMPUTAÇÃO QUÂNTICA = MAIOR REVOLUÇÃO TECNOLÓGICA D...
 

Introdução ao Spring Framework

  • 1. Introdução ao Spring Framework Natanael Fonseca Arquiteto de Software
  • 2. Ementa • O que é o Spring Framework ? • O que são POJOS ? • Inversão de Controle; • Injeção de dependência; • Módulos do Spring; • Cenários de uso com Spring; • Configurando o projeto;
  • 3. O que é ? • Fornece uma infra-estrutura completa de componentes que se integram facilmente com sua aplicação, deixando você livre para programar apenas suas regras de negócio. • No seu core, existe um container de Ioc.
  • 4. POJOS • Acrônimo para “Plain Old Java Object”; • Termo estabelecido por Martin Fowler, Rebecca Parsons e John Mackenzie em 2005; • Denota o desenvolvimento da lógica de negócio em Objetos Java definidos a partir de classes ordinárias sem o uso especifico de um modelo de componentização, em especial sem o uso de EJBs. • Portanto, o Spring sugere o uso de “JavaBeans” para a definição dos objetos da aplicação, criando um modelo de componentes simples e sem o uso de EJBs;
  • 5. Inversão de Controle • Normalmente o “controle” sobre o software em execução fica a cargo do próprio programador, contudo, quando em alguns trechos o controle é passado para outro componente(Container), dizemos que houve uma inversão de controle(Inversão de responsabilidades).
  • 6. Injeção de dependência • A injeção de dependência é um design pattern que visa desacoplar os componentes da aplicação. • Os componentes são instanciados externamente a classe. • Um gerenciador controla essas instancias. • Os componentes tem dependências entre si. • Esse gerenciador, através de uma configuração, liga os componentes de forma a montar a aplicação.
  • 8. Cenários de Uso • Dando suporte completo a uma aplicação JEE(Transação, Acesso a dados, Serviços e etc.); • Se integrando a algum framework Web, tal como: Struts, JSF e etc. Para acesso a infra- estrutura do Spring; • Servindo como ponte para a conexão entre diversas aplicações.Via Web Services, por exemplo;
  • 9. Configurando o Projeto • Basta baixar os “Jars” do spring, disponíveis em: • http://www.springsource.org/spring-community-download • Ou se você estiver usando um Gerenciador de dependência, como o Maven, basta consultar: • http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/ overview.html#d0e6
  • 10. Exemplo Imagine o cenário ao lado. Sem o uso de Spring, teríamos um código semelhante a este: ComponenteC componenteC = new ComponenteC(); Servico servico = new Servico(); ComponenteB componenteB = new ComponenteB(); componenteB.setServico( servico ); ComponentA componentA = new ComponentA(); componentA.setComponenteB( componenteB ); componentA.setComponenteC( componenteC ); /* O que acontece acima é a injeção manual pelo próprio programador das instancias que os respectivos componentes dependem via método set. */
  • 11. Exemplo Com spring, basta declarar os beans e fazer uso da injeção de dependência fornecida pelo mesmo. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring- beans.xsd"> <bean id="compA" class="com.blogspot.training.spring.ComponenteA"> <property name="componenteB" ref="compB"/> <property name="componenteC" ref="compC"/> </bean> <bean id="compB" class="com.blogspot.training.spring.ComponenteB"> <property name="servico" ref="servico"/> </bean> <bean id="compC" class="com.blogspot.training.spring.ComponenteC"/> <bean id="servico" class="com.blogspot.training.spring.Servico"/> </beans>
  • 12. Exemplo Como resultado final, temos a “Inversão de controle” de criação das instancias que agora são gerenciadas pelo Spring, ou seja, basta solicitarmos o componenteA que o mesmo já vem com todas as suas dependências preenchidas. public static void main(String[] args) { Resource resource = new ClassPathResource("applicationContext.xml"); BeanFactory factory = new XmlBeanFactory( resource ); ComponenteA componentA = (ComponenteA) factory.getBean( "compA" ); System.out.println( componentA ); System.out.println( componentA.getComponenteB() ); System.out.println( componentA.getComponenteB().getServico() ); }
  • 13. BeanFactory • Fábrica de Objetos responsável por realizar a inversão de controle (Ioc) na injeção de dependências dos objetos instanciados e solicitados por uma aplicação. • Substitui o operador “new” da linguagem java, deixando a cargo do Spring controlar a criação das instancias.
  • 14. BeanFactory • Possui diversos métodos para obter uma instancia de determinado objeto; • Pode-se usar o “id” lógico fornecido no XML ou ainda o tipo da classe .class; • Um implementação simples é a classe XMLBeanFactory que utiliza um arquivo XML para a definição dos beans;
  • 15. Interface Resource • Interface que abstrai a origem do arquivo XML, esta possui diversas implementações, por exemplo: • ClassPathResource • ServletContainerResource • URLResource • FileSystemResource • InputStreamResource • PortletResource
  • 16. Beans Singleton Por padrão, todos os beans são “Singleton”, mas caso queira explicitar, basta colocar “Scope=Singleton”, conforme exemplo abaixo: <bean id="compC" class="com.blogspot.training.spring.ComponenteC" scope="singleton" /> Fazendo isso, ao se tentar obter 5 instancias de compC, obteremos sempre as mesmas : for (int i = 0; i < 5; i++) { ComponenteC componentC = (ComponenteC) factory.getBean("compC"); System.out.println(componentC); } Resultado no console: com.blogspot.training.spring.ComponenteC@679bfb30 com.blogspot.training.spring.ComponenteC@679bfb30 com.blogspot.training.spring.ComponenteC@679bfb30 com.blogspot.training.spring.ComponenteC@679bfb30 com.blogspot.training.spring.ComponenteC@679bfb30
  • 17. Beans Prototype Caso queira que o spring retorne sempre instancias novas, basta alterar o atributo scope para “prototype”. <bean id="compC" class="com.blogspot.training.spring.ComponenteC" scope="prototype" /> Fazendo isso, ao se tentar obter 5 instancias de compC, obteremos instancias diferentes : for (int i = 0; i < 5; i++) { ComponenteC componentC = (ComponenteC) factory.getBean("compC"); System.out.println(componentC); } Resultado no console: com.blogspot.training.spring.ComponenteC@5097eded com.blogspot.training.spring.ComponenteC@26858bf1 com.blogspot.training.spring.ComponenteC@9a68ef9 com.blogspot.training.spring.ComponenteC@15f48262 com.blogspot.training.spring.ComponenteC@679bfb30
  • 18. ApplicationContext • Estende BeanFactory adicionando novas funcionalidades e provendo características JEE como, por exemplo: • Suporte a AOP; • Internacionalização; • Propagação de Eventos; • Dentre outras;
  • 19. ApplicationContext • Existem diversas implementações de ApplicationContext. Em suma, podemos utilizar ClasspathXMLApplicationContext para indicar que iremos ler o XML do classpath da aplicação. public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); ComponenteA compA = (ComponenteA) ctx.getBean("compA"); System.out.println( compA ); }
  • 20. Referencias • Spring Framework Reference • http://static.springsource.org/spring/docs/3.1.x/spring-framework- reference/html/ • Spring in Action, Terceira Edição de Craig Walls.

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n