從Spring 2.5 開始提供了完全基于注釋配置 Bean、裝配 Bean 的功能,
spring mvc 注解
。我們可以使用基于注釋的 Spring IoC 替換原來基于 XML 的配置。以前做項(xiàng)目使用的是xml配置來實(shí)現(xiàn)的,這幾天在做一個(gè)小項(xiàng)目,使用了springmvc的注解,跟大家分享一下。使用注解
Spring 2.5 提供了 AutowiredAnnotationBeanPostProcessor、
CommonAnnotationBeanPostProcessor、 PersistenceAnnotationBeanPostProcessor 和 RequiredAnnotationBeanPostProcessor 這四個(gè)主要的關(guān)于 Annotation 的 BeanPostProcessor。
我們可以使用
1.Autowired... 提供對(duì) Spring 特有的 Autowired 和 Qualifier 注釋。
2.CommonAnotation... 用于支持 JSR 250 的注釋
3.Persistence... 用于 JPA 的 PersistenceUnit 和PersistenceContext 注釋
4.Required... 用于檢查被 Required 注釋標(biāo)記的屬性是否被設(shè)定。
原來我們配置xml
在使用注釋配置之前,先來回顧一下傳統(tǒng)上是如何配置 Bean 并完成 Bean 之間依賴關(guān)系的建立。下面是 3 個(gè)類,它們分別是 Office、Car 和 Boss,這 3 個(gè)類需要在 Spring 容器中配置為 Bean:
package com.baobaotao; public class Office { private String fficeNo =”001”; //省略 get/setter @Override public String toString() { return officeNo: + officeNo; } }
public class Car { private String brand; private double price; // 省略 get/setter @Override public String toString() { return brand: + brand + , + price: + price;
} }
package com.baobaotao; public class Boss { private Car car; private Office office; // 省略 get/setter @Override public String toString() { return car: + car + + office: + office;
} }
我們?cè)赟pring容器中將Office和Car聲明為Bean,并注入到Boss Bean中:下面是使用傳統(tǒng) XML 完成這個(gè)工作的配置文件beans.xml.
使用@autowired
Spring 2.5 引入了 @Autowired 注釋,它可以對(duì)類成員變量、方法及構(gòu)造函數(shù)進(jìn)行標(biāo)注,完成自動(dòng)裝配的工作。來看一下使用 @Autowired 進(jìn)行成員變量自動(dòng)注入的代碼。
import org.springframework.beans.factory.annotation.Autowired;
public class Boss {
@Autowired
private Car car;
@Autowired
private Office office;
…
}
Spring 通過一個(gè) BeanPostProcessor 對(duì) @Autowired 進(jìn)行解析,所以要讓 @Autowired 起作用必須事先在 Spring 容器中聲明AutowiredAnnotationBeanPostProcessor Bean,
電腦資料
《spring mvc 注解》(http://m.clearvueentertainment.com)。讓@Autowired工作起來
<b><b><b></bean><b></bean><property name="officeNo" value="001/"></property><b></bean><property ca72="" name="brand" value="紅旗"></property><property name="price" value="2000/"></property>這樣,當(dāng) Spring 容器啟動(dòng)時(shí),AutowiredAnnotationBeanPostProcessor 將掃描 Spring 容器中所有 Bean,當(dāng)發(fā)現(xiàn) Bean 中擁有 @Autowired 注釋時(shí)就找到和其匹配(默認(rèn)按類型匹配)的 Bean,并注入到對(duì)應(yīng)的地方中去。
按照上面的配置,Spring 將直接采用 Java 反射機(jī)制對(duì) Boss 中的 car 和 office 這兩個(gè)私有成員變量進(jìn)行自動(dòng)注入。
注釋配置相對(duì)于 XML 配置的對(duì)比
??1、它可以充分利用 Java 的反射機(jī)制獲取類結(jié)構(gòu)信息,這些信息可以有效減少配置的工作。如使用 JPA 注釋配置 ORM 映射時(shí),我們就不需要指定 PO 的屬性名、類型等信息,如果關(guān)系表字段和 PO 屬性名、類型都一致,您甚至無需編寫任務(wù)屬性映射信息——因?yàn)檫@些信息都可以通過 Java 反射機(jī)制獲取。
??2、注釋和 Java 代碼位于一個(gè)文件中,而 XML 配置采用獨(dú)立的配置文件,大多數(shù)配置信息在程序開發(fā)完成后都不會(huì)調(diào)整,如果配置信息和 Java 代碼放在一起,有助于增強(qiáng)程序的內(nèi)聚性。而采用獨(dú)立的 XML 配置文件,程序員在編寫一個(gè)功能時(shí),往往需要在程序文件和配置文件中不停切換,這種思維上的不連貫會(huì)降低開發(fā)效率。
因此在很多情況下,注釋配置比 XML 配置更受歡迎,注釋配置有進(jìn)一步流行的趨勢(shì)。Spring 2.5 的一大增強(qiáng)就是引入了很多注釋類,現(xiàn)在您已經(jīng)可以使用注釋配置完成大部分 XML 配置的功能。在這篇文章里,我們將向您講述使用注釋進(jìn)行 Bean 定義和依賴注入的內(nèi)容。
具體問題具體分析
總結(jié):以上的對(duì)比是理論上的對(duì)比,做項(xiàng)目實(shí)踐后認(rèn)識(shí)到,每個(gè)項(xiàng)目到底xml配置還是使用注解來配置,跟項(xiàng)目的大小,需求有莫大的關(guān)系,不是“一句注解比XML簡(jiǎn)單”就要使用的,還是需要具體問題具體分析的。
??