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.