Spring JSR-250 Annotations
Spring também suporta anotações baseadas em JSR-250 que incluem anotações @PostConstruct, @PreDestroy e @Resource. Embora essas anotações não sejam realmente necessárias porque você já tem outros suplentes, deixe-nos ter uma breve ideia sobre eles.
@PostConstruct e @PreDestroy Annotations
Para definir a configuração e desmontagem de um bean, simplesmente declaramos o <bean> com init-method e / ou destroy-methodparâmetros. O atributo init-method especifica um método que deve ser chamado no bean imediatamente após a instanciação. Da mesma forma, o método destroy especifica um método que é chamado pouco antes de um bean ser removido do contêiner.
Você pode usar @PostConstruct anotação como uma alternativa de retorno de chamada de inicialização e @PreDestroy anotação como uma alternativa de retorno de chamada de destruição, conforme explicado no exemplo abaixo.
Exemplo
Vamos ter um Eclipse IDE funcionando e seguir os seguintes passos para criar um aplicativo Spring -
Degrau | Descrição |
---|---|
1 | Crie um projeto com um nome SpringExample e crie um pacote com.tutorialspoint sob osrc pasta no projeto criado. |
2 | Adicione as bibliotecas Spring necessárias usando a opção Adicionar JARs externos, conforme explicado no capítulo Exemplo do Spring Hello World . |
3 | Crie classes Java HelloWorld e MainApp no pacote com.tutorialspoint . |
4 | Crie o arquivo de configuração do Beans Beans.xml sob osrc pasta. |
5 | A etapa final é criar o conteúdo de todos os arquivos Java e do arquivo de configuração do Bean e executar o aplicativo conforme explicado abaixo. |
Aqui está o conteúdo de HelloWorld.java arquivo -
package com.tutorialspoint;
import javax.annotation.*;
public class HelloWorld {
private String message;
public void setMessage(String message){
this.message = message;
}
public String getMessage(){
System.out.println("Your Message : " + message);
return message;
}
@PostConstruct
public void init(){
System.out.println("Bean is going through init.");
}
@PreDestroy
public void destroy(){
System.out.println("Bean will destroy now.");
}
}
A seguir está o conteúdo do MainApp.javaArquivo. Aqui, você precisa registrar um gancho de desligamentoregisterShutdownHook()método que é declarado na classe AbstractApplicationContext. Isso garantirá um desligamento normal e chamará os métodos de destruição relevantes.
package com.tutorialspoint;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
obj.getMessage();
context.registerShutdownHook();
}
}
A seguir está o arquivo de configuração Beans.xml requerido para métodos init e destroy -
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:context = "http://www.springframework.org/schema/context"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>
<bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld"
init-method = "init" destroy-method = "destroy">
<property name = "message" value = "Hello World!"/>
</bean>
</beans>
Assim que terminar de criar os arquivos de configuração de código-fonte e bean, vamos executar o aplicativo. Se tudo estiver bem com seu aplicativo, ele imprimirá a seguinte mensagem -
Bean is going through init.
Your Message : Hello World!
Bean will destroy now.
@Resource Annotation
Você pode usar @Resourceanotação em campos ou métodos setter e funciona da mesma forma que em Java EE 5. A anotação @Resource recebe um atributo 'nome' que será interpretado como o nome do bean a ser injetado. Você pode dizer, segueby-name semântica de autowiring conforme demonstrado no exemplo a seguir -
package com.tutorialspoint;
import javax.annotation.Resource;
public class TextEditor {
private SpellChecker spellChecker;
@Resource(name = "spellChecker")
public void setSpellChecker( SpellChecker spellChecker ){
this.spellChecker = spellChecker;
}
public SpellChecker getSpellChecker(){
return spellChecker;
}
public void spellCheck(){
spellChecker.checkSpelling();
}
}
Se nenhum 'nome' for especificado explicitamente, o nome padrão é derivado do nome do campo ou método setter. No caso de um campo, leva o nome do campo; no caso de um método setter, leva o nome da propriedade do bean.