位置:首頁 > Java技術 > Spring > Spring JSR-250注解

Spring JSR-250注解

Spring也基於JSR-250注解,包括@PostConstruct,@PreDestroy和@Resource 注解。雖然這些注釋都冇有真正必需的,因為你已經有其他的候補,但還是讓我給他們有關一個簡單的想法。

@PostConstruct 和@PreDestroy 注解:

要定義安裝和拆卸一個bean,我們隻是聲明了初始化方法和/或銷毀,<bean>方法的參數。在init-method屬性指定一個方法,是被稱為bean上後立即實例化。同樣,銷毀規定了被稱為bean被從容器中取出之前的方法。

您可以使用@PostConstruct 注釋的初始化回調的替代和@PreDestroyannotation 作為銷毀回調的另一種如在下麵的例子來說明。

例子

讓我們使用Eclipse IDE,然後按照下麵的步驟來創建一個Spring應用程序:

步驟 描述
1 Create a project with a name SpringExample and create a package com.yiibai under the src folder in the created project.
2 Add required Spring libraries using Add External JARs option as explained in the Spring Hello World Example chapter.
3 Create Java classes HelloWorld and MainApp under the com.yiibai package.
4 Create Beans configuration file Beans.xml under the src folder.
5 The final step is to create the content of all the Java files and Bean Configuration file and run the application as explained below.

這裡是HelloWorld.java 文件的內容:

package com.yiibai;
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.");
   }
}

以下是MainApp.java文件的內容。在這裡,你需要注冊一個關閉掛鉤registerShutdownHook() 是在AbstractApplicationContext類中聲明方法。這將確保正常關閉,並調用相關的destroy()方法。

package com.yiibai;

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

下麵是需要的init和destroy方法配置文件beans.xml文件:

<?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.yiibai.HelloWorld"
       init-method="init" destroy-method="destroy">
       <property name="message" value="Hello World!"/>
   </bean>

</beans>

創建源代碼和bean配置文件完成後,讓我們運行應用程序。如果一切順利,將打印以下信息:

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

@Resource 注解:

您可以使用@Resource注解的字段或setter方法​​,它的工作原理相同在Java EE 5中。在@Resource注解有一個'name'屬性將被解釋為bean的名字被注入。可以說,它遵循名稱自動裝配這體現在下麵的例子中的語義:

package com.yiibai;

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

如果冇有'name'被明確指定,默認名稱是從字段名或者setter方法得出。如果是字段,它需要的字段名稱,在出現一個setter方法,它需要的bean屬性名。