Anotaciones Spring JSR-250

Spring también admite anotaciones basadas en JSR-250 que incluyen anotaciones @PostConstruct, @PreDestroy y @Resource. Aunque estas anotaciones no son realmente necesarias porque ya tiene otras alternativas, permítanos tener una breve idea sobre ellas.

@PostConstruct y @PreDestroy Anotaciones

Para definir la configuración y el desmontaje de un bean, simplemente declaramos el <bean> con init-method y / o destroy-methodparámetros. El atributo init-method especifica un método que se llamará en el bean inmediatamente después de la instanciación. De manera similar, el método destroy especifica un método que se llama justo antes de que se elimine un bean del contenedor.

Puedes usar @PostConstruct anotación como alternativa a la devolución de llamada de inicialización y @PreDestroy anotación como alternativa a la devolución de llamada de destrucción como se explica en el siguiente ejemplo.

Ejemplo

Tengamos un IDE de Eclipse en funcionamiento y sigamos los siguientes pasos para crear una aplicación Spring:

Paso Descripción
1 Cree un proyecto con un nombre SpringExample y cree un paquete com.tutorialspoint bajo elsrc carpeta en el proyecto creado.
2 Agregue las bibliotecas Spring requeridas usando la opción Agregar JAR externos como se explica en el capítulo Ejemplo de Spring Hello World .
3 Cree clases Java HelloWorld y MainApp en el paquete com.tutorialspoint .
4 Cree el archivo de configuración de Beans Beans.xml bajo elsrc carpeta.
5 El paso final es crear el contenido de todos los archivos Java y el archivo de configuración de Bean y ejecutar la aplicación como se explica a continuación.

Aquí está el contenido de HelloWorld.java archivo -

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 continuación se muestra el contenido de la MainApp.javaarchivo. Aquí, debe registrar un gancho de cierreregisterShutdownHook()método que se declara en la clase AbstractApplicationContext. Esto asegurará un cierre ordenado y llamará a los métodos de destrucción 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 continuación se muestra el archivo de configuración Beans.xml requerido para los métodos de inicio y destrucción -

<?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>

Una vez que haya terminado de crear los archivos de configuración de fuente y bean, ejecutemos la aplicación. Si todo está bien con su aplicación, imprimirá el siguiente mensaje:

Bean is going through init.
Your Message : Hello World!
Bean will destroy now.

@Anotación de recursos

Puedes usar @Resourceanotación en campos o métodos de establecimiento y funciona igual que en Java EE 5. La anotación @Resource toma un atributo 'nombre' que se interpretará como el nombre del bean que se inyectará. Puedes decir que sigueby-name semántica de cableado automático como se demuestra en el siguiente ejemplo:

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();
   }
}

Si no se especifica un 'nombre' explícitamente, el nombre predeterminado se deriva del nombre del campo o del método de establecimiento. En el caso de un campo, toma el nombre del campo; en el caso de un método setter, toma el nombre de propiedad del bean.