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.
Saber fazer Injeções de ColeçõesSaber fazer Injeção entre beans
colaboradoresSaber instanciar o contexto do
Spring
Como “amarrar” as camadas? Acoplamento? Injeção: Setter e Constructor Serviço:
▪ Componente▪ Reutilizável▪ Extensível
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
<?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
}
• Carregamento tardio• Aumento de performance• Não desperdiça recursos• lazy-init=“true”• Sempre recomendado
• Design Pattern GoF• Default• scope=“Singleton”• Performace• Cuidado: dirty fields
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.
• Propriedade• Regras de getters/setters, camelCase• Setter público• Injeção XML
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>
• Construtor• Índice ,Tipo ou ordem natural• Construtor público• Injeção XML
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>
• 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
• 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 !!!
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; }}
<?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>
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"); }}
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.