spring capitulo 02

22

Upload: diego-pacheco

Post on 18-Nov-2014

6.412 views

Category:

Documents


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Spring Capitulo 02
Page 2: Spring Capitulo 02
Page 3: Spring Capitulo 02

Conhecer o conceito de IoCSaber utilizar: Lazy-initialization

e SingletonsConhecer os escopos dos beansSaber registrar beans no

container do SpringSaber realizar injeções de setters

e constructors.

Page 4: Spring Capitulo 02

Saber fazer Injeções de ColeçõesSaber fazer Injeção entre beans

colaboradoresSaber instanciar o contexto do

Spring

Page 5: Spring Capitulo 02

Como “amarrar” as camadas? Acoplamento? Injeção: Setter e Constructor Serviço:

▪ Componente▪ Reutilizável▪ Extensível

Page 6: Spring Capitulo 02

Principais vantagens: Desacoplamento Visão fácil das dependências Facilidade para testes Aplicações para terceiros (fora de

nosso controle). EX: Contador de linhas PDF.Contador PDF

Page 7: Spring Capitulo 02

<?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-2.0.xsd">

<bean id="autor" class="com.targettrust.spring.bad.ok.Autor" />

</beans>

package com.targettrust.spring.bad;import java.util.List;public class Autor {

private String nome; private List<Livro> livros;

// Setters

}

Page 8: Spring Capitulo 02

• Carregamento tardio• Aumento de performance• Não desperdiça recursos• lazy-init=“true”• Sempre recomendado

Page 9: Spring Capitulo 02

• Design Pattern GoF• Default• scope=“Singleton”• Performace• Cuidado: dirty fields

Page 10: Spring Capitulo 02

Scopo Descriçãosingleton Uma única instância de objeto para todo o contexto do Spring.

prototype Múltiplas instâncias de um objeto para o container do Spring.

request * Escopo relacionado ao ciclo de vida HTTP Request, a cada request teremos outra instância de bean no Spring

session * Escopo relacionado ao ciclo de vida HTTP Session, uma única instância do Bean por session.

global session *

Escopo relacionado ao cliclo de vida global HTTP Session, bean válido em uma session global. Utilizado para portlets.

•* contexto web-aware criados por XmlWebApplicationContext.

Page 11: Spring Capitulo 02

• Propriedade• Regras de getters/setters, camelCase• Setter público• Injeção XML

Page 12: Spring Capitulo 02

package com.targettrust.spring.setter;public class Aluno {

private String nome;

public String getNome() {return nome;

}public void setNome(String nome) {

this.nome = nome;}

}

<?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-2.0.xsd" default-lazy-init="true">

<bean id="aluno" class="com.targettrust.spring.setter.Aluno" > <property name="nome" value="Diego" /> </bean>

</beans>

Page 13: Spring Capitulo 02

• Construtor• Índice ,Tipo ou ordem natural• Construtor público• Injeção XML

Page 14: Spring Capitulo 02

package com.targettrust.spring.constructor;public class Pessoa {

private String nome; private Integer idade; private boolean cartaMorotista;

public Pessoa(String nome, Integer idade, boolean cartaMorotista) {super();this.nome = nome;this.idade = idade;this.cartaMorotista = cartaMorotista;

}

}

<?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-2.0.xsd">

<bean id="pessoa" class="com.targettrust.spring.constructor.Pessoa" > <constructor-arg value="Diego Pacheco" /> <constructor-arg value="22" /> <constructor-arg value="false" /> </bean>

</beans>

Page 15: Spring Capitulo 02

• Tags: </list>, </set>, </map>, </set>,</props> ou value(properties)

• Todo tipo de coleção via Properties Editor

• Injeção via Setter ou Construtor • Injeção XML

Page 16: Spring Capitulo 02
Page 17: Spring Capitulo 02
Page 18: Spring Capitulo 02

• Injeção de Pojos• 2 ou mais beans• Auto-injeção• Injeção via Setter ou Constructor• EJB 3.0 não tem esse recurso !!!

Page 19: Spring Capitulo 02

package com.targettrust.spring.colaboradores;public class Cidade {

private String nome;

public Cidade() {} public String getNome() {

return nome; } public void setNome(String nome) {

this.nome = nome; }}

package com.targettrust.spring.colaboradores;import java.util.List;public class Estado {

private String sigla; private List<Cidade> cidades;

public Estado() {} public String getSigla() {

return sigla; } public void setSigla(String sigla) {

this.sigla = sigla; } public List<Cidade> getCidades() { return cidades; } public void setCidades(List<Cidade> cidades) {

this.cidades = cidades; }}

Page 20: Spring Capitulo 02

<?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-2.0.xsd"> <bean id="cidA" class="com.targettrust.spring.colaboradores.Cidade" > <property name="nome"><value>PortoAlegre</value></property> </bean>

<bean id="cidB" class="com.targettrust.spring.colaboradores.Cidade" > <property name="nome"><value>Gravataí</value></property> </bean>

<bean id="estado" class="com.targettrust.spring.colaboradores.Estado" > <property name="sigla" value="RS" /> <property name="cidades"> <list> <ref bean="cidA" /> <ref local="cidB" /> <bean class="com.targettrust.spring.colaboradores.Cidade">

<property name="nome" value="Canoas" /> </bean> </list> </property> </bean> </beans>

Page 21: Spring Capitulo 02

package com.targettrust.spring.colaboradores;import org.springframework.beans.factory.BeanFactory;import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestColaboradores { public static void main(String[] args) { BeanFactory bf = new ClassPathXmlApplicationContext("/com/targettrust/spring/" +

"colaboradores/Spring-beans.xml"); }}

Page 22: Spring Capitulo 02

1. Faça a injeção de um objeto Cliente em um Objeto Vendedor.

2. Faça a injeção de uma Lista de Alunos em um Objeto Turma.

3. Faça a injeção de um Mapa de UF com uma Lista de Cidades.

4. Faça a injeção de um UF em um objeto País através de constructor injection.

5. Faça um Serviço de Calculadora e injete funções matemáticas nesse bean.