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

Spring introduction
Spring introductionSpring introduction
Spring introduction
Manav Prasad
 
Spring Boot Tutorial
Spring Boot TutorialSpring Boot Tutorial
Spring Boot Tutorial
Naphachara Rattanawilai
 
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
 
Spring framework Introduction
Spring framework IntroductionSpring framework Introduction
Spring framework Introduction
Anuj Singh Rajput
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento web
Rodrigo Rodrigues
 
Introdução ao Spring Framework MVC
Introdução ao Spring Framework MVCIntrodução ao Spring Framework MVC
Introdução ao Spring Framework MVC
Messias Batista
 
Spring boot introduction
Spring boot introductionSpring boot introduction
Spring boot introduction
Rasheed Waraich
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
nomykk
 
Node.js e Express
Node.js e ExpressNode.js e Express
Node.js e Express
Dan Vitoriano
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação maven
André Justi
 
Maven tutorial
Maven tutorialMaven tutorial
Maven tutorial
Dragos Balan
 
React - Introdução
React - IntroduçãoReact - Introdução
React - Introdução
Jefferson Mariano de Souza
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!
Jakub Kubrynski
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
ASG
 
Spring boot
Spring bootSpring boot
Spring boot
sdeeg
 
Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introduction
Jonathan Holloway
 
Spring Boot
Spring BootSpring Boot
Spring Boot
Pei-Tang Huang
 
Spring framework-tutorial
Spring framework-tutorialSpring framework-tutorial
Spring framework-tutorial
vinayiqbusiness
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
Gabriel Moura
 
Orquestração de containers com Rancher
Orquestração de containers com RancherOrquestração de containers com Rancher
Orquestração de containers com Rancher
Alex Ishida
 

Mais procurados (20)

Spring introduction
Spring introductionSpring introduction
Spring introduction
 
Spring Boot Tutorial
Spring Boot TutorialSpring Boot Tutorial
Spring Boot Tutorial
 
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...
 
Spring framework Introduction
Spring framework IntroductionSpring framework Introduction
Spring framework Introduction
 
Introdução sobre desenvolvimento web
Introdução sobre desenvolvimento webIntrodução sobre desenvolvimento web
Introdução sobre desenvolvimento web
 
Introdução ao Spring Framework MVC
Introdução ao Spring Framework MVCIntrodução ao Spring Framework MVC
Introdução ao Spring Framework MVC
 
Spring boot introduction
Spring boot introductionSpring boot introduction
Spring boot introduction
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Node.js e Express
Node.js e ExpressNode.js e Express
Node.js e Express
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação maven
 
Maven tutorial
Maven tutorialMaven tutorial
Maven tutorial
 
React - Introdução
React - IntroduçãoReact - Introdução
React - Introdução
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!
 
Introduction to Spring Framework
Introduction to Spring FrameworkIntroduction to Spring Framework
Introduction to Spring Framework
 
Spring boot
Spring bootSpring boot
Spring boot
 
Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introduction
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Spring framework-tutorial
Spring framework-tutorialSpring framework-tutorial
Spring framework-tutorial
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Orquestração de containers com Rancher
Orquestração de containers com RancherOrquestração de containers com Rancher
Orquestração de containers com Rancher
 

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
 
Arquitetura do Framework Spring
Arquitetura do Framework SpringArquitetura do Framework Spring
Arquitetura do Framework Spring
Alexsandro Oliveira
 
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
 

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
 
Arquitetura do Framework Spring
Arquitetura do Framework SpringArquitetura do Framework Spring
Arquitetura do Framework Spring
 
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
 

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

PRATICANDO O SCRUM Scrum team, product owner
PRATICANDO O SCRUM Scrum team, product ownerPRATICANDO O SCRUM Scrum team, product owner
PRATICANDO O SCRUM Scrum team, product owner
anpproferick
 
Gestão de dados: sua importância e benefícios
Gestão de dados: sua importância e benefíciosGestão de dados: sua importância e benefícios
Gestão de dados: sua importância e benefícios
Rafael Santos
 
Teoria de redes de computadores redes .doc
Teoria de redes de computadores redes .docTeoria de redes de computadores redes .doc
Teoria de redes de computadores redes .doc
anpproferick
 
Orientações para utilizar Drone no espaço Brasil
Orientações para utilizar Drone no espaço BrasilOrientações para utilizar Drone no espaço Brasil
Orientações para utilizar Drone no espaço Brasil
EliakimArajo2
 
Como fui de 0 a lead na gringa em 3 anos.pptx
Como fui de 0 a lead na gringa em 3 anos.pptxComo fui de 0 a lead na gringa em 3 anos.pptx
Como fui de 0 a lead na gringa em 3 anos.pptx
tnrlucas
 
Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!
Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!
Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!
Annelise Gripp
 
Por que escolhi o Flutter - Campus Party Piauí.pdf
Por que escolhi o Flutter - Campus Party Piauí.pdfPor que escolhi o Flutter - Campus Party Piauí.pdf
Por que escolhi o Flutter - Campus Party Piauí.pdf
Ian Oliveira
 

Último (7)

PRATICANDO O SCRUM Scrum team, product owner
PRATICANDO O SCRUM Scrum team, product ownerPRATICANDO O SCRUM Scrum team, product owner
PRATICANDO O SCRUM Scrum team, product owner
 
Gestão de dados: sua importância e benefícios
Gestão de dados: sua importância e benefíciosGestão de dados: sua importância e benefícios
Gestão de dados: sua importância e benefícios
 
Teoria de redes de computadores redes .doc
Teoria de redes de computadores redes .docTeoria de redes de computadores redes .doc
Teoria de redes de computadores redes .doc
 
Orientações para utilizar Drone no espaço Brasil
Orientações para utilizar Drone no espaço BrasilOrientações para utilizar Drone no espaço Brasil
Orientações para utilizar Drone no espaço Brasil
 
Como fui de 0 a lead na gringa em 3 anos.pptx
Como fui de 0 a lead na gringa em 3 anos.pptxComo fui de 0 a lead na gringa em 3 anos.pptx
Como fui de 0 a lead na gringa em 3 anos.pptx
 
Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!
Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!
Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!
 
Por que escolhi o Flutter - Campus Party Piauí.pdf
Por que escolhi o Flutter - Campus Party Piauí.pdfPor que escolhi o Flutter - Campus Party Piauí.pdf
Por que escolhi o Flutter - Campus Party Piauí.pdf
 

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