Spring知識點總結(註解篇)

Spring註解使用

 

@Component,該註解使用到某個類時,表明該類會作爲組件類,告知Spring爲這個類創建一個bean。@Name註解可以作爲它的替代方案。

 

@ComponentScan告訴Spring 某個packag下用註解標識的類,需要被spring自動掃描並且裝入bean容器。不配置base package的情況下,以配置類所在的包作爲基礎包進行掃描組件。當然也可以配置base package,並且是多個package。

 

@Autowired註解由Spring提供,默認按類型裝配,默認情況下要求依賴對象必須存在,如果要允許爲null,則需要設置required屬性爲false。

如果我們想使用名稱裝配可以結合@Qualifier註解進行使用。可以使用Java提供的@Inject來替代。

 

@Bean,能夠使用@Scope註解來指定該bean的範圍。

用例

@Bean
@Scope("prototype")
public TransferService transferService() {
return new TransferServiceImpl();
}

@Configuration用於定義配置類,標註在某個類上,相當於把該類作爲spring的xml配置文件中的<beans>,其作用是配置Spring容器(應用上下)。

當然還有AOP的一系列的註解,不在此一一述說。

 


 

SpringMVC的常用註解

@PathVariable

URI模板 “favusers/{favUserId}"指定變量的名字 favUserId ,當控制器處理這個請求的時候, favUserId的值會被設定到URI中。比如,當有一個像“favusers/favccxx”這樣的請求時,favUserId的值就是 favccxx。

 

@PathVariable 可以有多個註解,像下面這樣:

@RequestMapping(value="/owners/{ownerId}/pets/{petId}", method=RequestMethod.GET)
public String findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {
//ownerId和petId被自動賦值

}

 

@RequestParam

該註解將請求的參數綁定到方法中的參數上。如果想自定義指定參數的話,如果將@RequestParam的 required 屬性設置爲false

(如@RequestParam(value="id",required=false))。

 

@ModelAttribute

該註解可以作用在方法或方法參數上,該註解支持一個屬性value,類型爲String,表示綁定的屬性名稱。

 

當它作用在方法上時,標明該方法的目的是添加一個或多個模型屬性(model attributes)。該方法支持與@RequestMapping一樣的參數類型,但並不能直接映射成請求。控制器中的@ModelAttribute方法會在@RequestMapping方法調用之前而調用。

@ModelAttribute
public Account addAccount(@RequestParam String number) {
return accountManager.findAccount(number);
}

@ModelAttribute
public void populateModel(@RequestParam String number, Model model) {
model.addAttribute(accountManager.findAccount(number));
// add more ...
}

 @ModelAttribute方法有兩種風格:一種是添加隱形屬性並返回它。另一種是該方法接受一個模型並添加任意數量的模型屬性。用戶可以根據自己的需要選擇對應的風格。

 


 

請舉例說明@Qualifier註解?

@Qualifier註解意味着可以在被標註bean的字段上可以自動裝配。

下面的示例將會在Customer的person屬性中自動裝配person的值。

public class Customer
{
@Autowired
private Person person;
}

在配置文件中配置Person類。

<bean id="customer" class="com.howtodoinjava.common.Customer" />

<bean id="personA" class="com.howtodoinjava.common.Person" >
<property name="name" value="lokesh" />
</bean>

<bean id="personB" class="com.howtodoinjava.common.Person" >
<property name="name" value="alex" />
</bean>

 

但是這樣子Spring不知道要給Customer裝配那個bean。所以我們需要用到@Qualifier

public class Customer
{
@Autowired
@Qualifier("personA")
private Person person;
}

 


 

@Autowired和@Resource的區別是什麼? 

相同點:@Autowired與@Resource都可以用來裝配bean. 都可以寫在字段上,或寫在setter方法上。

 

不同點:

@Autowired註解由Spring提供,默認按類型裝配,默認情況下要求依賴對象必須存在,如果要允許爲null,則需要設置required屬性爲false。

如果我們想使用名稱裝配可以結合@Qualifier註解進行使用,如下:

@Autowired()
@Qualifier("baseDao")
private BaseDao baseDao;

 

@Resource 是JDK1.6支持的註解,默認按照名稱進行裝配,名稱可以通過name屬性進行指定。Resource有兩個重要的屬性:name和type,而Spring將@Resource註解的name屬性解析爲bean的名字,而type屬性則解析爲bean的類型。

 

@Resource裝配順序:

①如果同時指定了name和type,則從Spring上下文中找到唯一匹配的bean進行裝配,找不到則拋出異常。

②如果指定了name,則從上下文中查找名稱(id)匹配的bean進行裝配,找不到則拋出異常。

③如果指定了type,則從上下文中找到類似匹配的唯一bean進行裝配,找不到或是找到多個,都會拋出異常。

④如果既沒有指定name,又沒有指定type,則自動按照byName方式進行裝配

 

示例代碼

@Resource(name="baseDao")
private BaseDao baseDao;

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章