br>
Ao definir um <bean> tem a opção de declarar um âmbito para esse feijão. Por exemplo, para forçar a Primavera a produzir uma nova instância de feijão cada vez que for necessário, deve declarar o atributo de escopo do feijão como sendo protótipo. Da mesma forma, se quiser que a Primavera devolva a mesma instância de feijão cada vez que for necessária, deve declarar o atributo de escopo do feijão como sendo de um único botão.
A Estrutura da Primavera suporta os cinco âmbitos seguintes, três dos quais só estão disponíveis se utilizar uma Aplicação de Contexto Web.
Sr.No. | |
---|---|
1 |
singleton Esta definição de feijão é alargada a uma única instância por contentor de Spring IoC (por defeito). |
2 |
protótipo Este escopo uma única definição de feijão para ter qualquer número de instâncias de objectos. |
3 |
pedido Este escopo uma definição de feijão para um pedido HTTP. Apenas válido no contexto de uma aplicação Spring ApplicationContext. |
4 |
session Este escopo uma definição de feijão a uma sessão HTTP. Apenas válido no contexto de uma aplicação Spring ApplicationContext. |
5 |
global-session Este escopo uma definição de feijão para uma sessão HTTP global. Apenas válido no contexto de um web-aware Spring ApplicationContext. |
Neste capítulo, discutiremos os dois primeiros âmbitos e os três restantes serão discutidos quando discutirmos sobre o web-aware Spring ApplicationContext.
O âmbito de um botão
Se um âmbito for definido para um botão, o contentor Spring IoC cria exactamente uma instância do objecto definido por essa definição de feijão. Esta instância única é armazenada numa cache de tais feijões de singleton, e todos os pedidos e referências subsequentes para aquele feijão nomeado devolvem o objecto em cache.
O escopo padrão é sempre singleton. No entanto, quando é necessária uma e apenas uma instância de um feijão, é possível definir a propriedade do escopo como singleton no ficheiro de configuração do feijão, como mostrado no seguinte trecho de código –
<!-- A bean definition with singleton scope --><bean id = "..." class = "..." scope = "singleton"> <!-- collaborators and configuration for this bean go here --></bean>
Exemplo
Deixe-nos ter uma IDE Eclipse em funcionamento e dê os seguintes passos para criar uma Primavera aplicação –
Steps | |
---|---|
1 | Criar um projecto com um nome SpringExample e criar um pacote com.tutorialspoint sob a pasta src no projecto criado. |
2 | Adicionar bibliotecas Spring necessárias usando a opção Add External JARs como explicado no capítulo Spring Hello World Example. |
3 | Criar classes Java HelloWorld e MainApp sob o pacote com.tutorialspoint. |
4 | Create Beans configuration file Beans.xml sob a pasta src. |
5 | O passo final é criar o conteúdo de todos os ficheiros Java e ficheiro de Configuração do Feijão e executar a aplicação como explicado abaixo. |
Aqui está o conteúdo do ficheiro HelloWorld.java –
package com.tutorialspoint;public class HelloWorld { private String message; public void setMessage(String message){ this.message = message; } public void getMessage(){ System.out.println("Your Message : " + message); }}
Seguir é o conteúdo da aplicação principal.java file –
package com.tutorialspoint;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp { public static void main(String args) { ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); HelloWorld objA = (HelloWorld) context.getBean("helloWorld"); objA.setMessage("I'm object A"); objA.getMessage(); HelloWorld objB = (HelloWorld) context.getBean("helloWorld"); objB.getMessage(); }}
Following é o ficheiro de configuração Beans.xml necessário para o âmbito de um único botão –
<?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-3.0.xsd"> <bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld" scope = "singleton"> </bean></beans>
Após ter acabado de criar os ficheiros de configuração da fonte e do feijão, vamos executar a aplicação. Se tudo estiver bem com a sua aplicação, imprimirá a seguinte mensagem –
Your Message : I'm object AYour Message : I'm object A
O escopo do protótipo
Se o escopo estiver definido para protótipo, o contentor de Spring IoC cria uma nova instância de feijão do objecto cada vez que é feito um pedido para esse feijão específico. Como regra, utilizar o protótipo de escopo para todos os feijões de estado cheio e o escopo de um botão para feijões sem estado.
Para definir um escopo protótipo, pode-se definir a propriedade do escopo como protótipo no ficheiro de configuração do feijão, como mostrado no seguinte trecho de código –
<!-- A bean definition with prototype scope --><bean id = "..." class = "..." scope = "prototype"> <!-- collaborators and configuration for this bean go here --></bean>
Exemplo
Deixe-nos ter a IDE Eclipse em funcionamento e siga os seguintes passos para criar uma Primavera aplicação –
Steps | |
---|---|
1 | Criar um projecto com um nome SpringExample e criar um pacote com.tutorialspoint sob a pasta src no projecto criado. |
2 | Adicionar bibliotecas Spring necessárias usando a opção Add External JARs como explicado no capítulo Spring Hello World Example. |
3 | Criar classes Java HelloWorld e MainApp sob o pacote com.tutorialspoint. |
4 | Create Beans configuration file Beans.xml sob a pasta src. |
5 | O passo final é criar o conteúdo de todos os ficheiros Java e ficheiro de Configuração do Feijão e executar a aplicação como explicado abaixo. |
Aqui está o conteúdo do ficheiro HelloWorld.java
package com.tutorialspoint;public class HelloWorld { private String message; public void setMessage(String message){ this.message = message; } public void getMessage(){ System.out.println("Your Message : " + message); }}
Seguir é o conteúdo da aplicação principal.java file –
package com.tutorialspoint;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class MainApp { public static void main(String args) { ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); HelloWorld objA = (HelloWorld) context.getBean("helloWorld"); objA.setMessage("I'm object A"); objA.getMessage(); HelloWorld objB = (HelloWorld) context.getBean("helloWorld"); objB.getMessage(); }}
Following é o ficheiro de configuração Beans.xml necessário para o escopo do protótipo –
<?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-3.0.xsd"> <bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld" scope = "prototype"> </bean></beans>