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屬性名。