Spring基於註解和XML混合方式的使用

首先要明白,基於註解和XML兩種方式的實現功能是同樣的,只是兩種不一樣的配置方式。java

1、IoC配置

一、配置xml

在使用註解與xml結合的方式配置IoC以前,首先要引入context標籤:spring

xmlns:context="http://www.springframework.org/schema/context" 

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd

再配置包的掃描:session

<?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" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
	<!-- 掃描com.luis包下全部使用註解的類型 --> 
    <context:component-scan base-package="com.luis" />
</beans>

此配置起的做用是掃描com.luis包下全部帶@Component及其衍生註解的類函數

二、配置註解

2.一、@Component註解

@Component註解做用是將資源交給Spring進行管理,至關於xml中配置的bean。ui

經過屬性value指定bean的id,若不指定則默認bean的名稱爲類的名稱,首字母小寫。spa

2.二、@Component衍生註解

@Component產生三個衍生註解-@Controller、@Service、@Repository。它們與@Component的做用及用法一致,習慣上表達更爲清晰的意義:prototype

  • @Controller:通常用於表現層(controller)的註解。
  • @Service:通常用於業務層(service)的註解。
  • @Repository:通常用於持久層(dao)的註解。

2、DI註解配置

DI的裝配方式有兩種:按類型裝配,按名稱裝配。這裏的裝配至關於xml配置方式中的:code

<property name="" ref="">

一、按類型裝配

1.一、@Autowired

@Autowired默認按類型裝配(byType),它是由AutowiredAnnotationBeanPostProcessor類實現。component

@Autowired是spring自帶的註解,它默認狀況下要求依賴對象必須存在,若是須要容許null值,能夠設置它的required屬性爲false,如:@Autowired(required=false)。xml

1.二、@Inject

@Inject是根據類型進行自動裝配的,若是須要按名稱進行裝配,則須要配合@Named;

@Inject是JSR330中的規範,須要導入javax.inject.Inject;實現注入,它能夠做用在變量、setter方法、構造函數上。

二、按名稱裝配

2.一、@Resource

@Resource默認按名稱裝配(byName),能夠經過@Resource的name屬性指定名稱, @Resource屬於J2EE JSR250規範的實現。

@Resource若是沒有指定name屬性,當註解寫在字段上時,默認取字段名進行按照名稱查找,當找不到與名稱匹配的bean時才按照類型進行裝配。若是name屬性一旦指定,就只會按照名稱進行裝配。

推薦使用@Resource註解,這個註解屬於J2EE的,減小了與spring的耦合。至關於xml中的<property name="" value="">

2.二、註解組合

其實咱們的按名稱裝配與按類型裝配兩種方式之間並無明顯的分界線,如@Resource也能夠經過類型進行裝配,而咱們的按照類型裝配也能夠和其餘註解結合的方式實現按照名策劃那個裝配。

@Autowired能夠與@Qualifier結合實現按名稱裝配。在自動按照類型注入的基礎之上,再按照 Bean 的 id 注入,@Qualifier在給字段注入時不能獨立使用,必須和@Autowire 一塊兒使用;可是給方法參數注入時,能夠獨立使用。

注意,@Autowired、@Resource、@Inject區別

  • @Autowired是spring自帶的,@Inject是JSR330規範實現的,@Resource是JSR250規範實現的,須要導入不一樣的包
  • @Autowired、@Inject用法基本同樣,不一樣的是@Autowired有一個request屬性
  • @Autowired、@Inject是默認按照類型匹配的,@Resource是按照名稱匹配的
  • @Autowired若是須要按照名稱匹配須要和@Qualifier一塊兒使用,@Inject和@Name一塊兒使用

2.三、其餘註解

經常使用的註解如@Value,用於給基本類型和String類型注入值、使用佔位符獲取屬性文件中的值

@Value(「${name}」)//name是properties文件中的key
private String name;

bean做用範圍註解@Scope,用於指定 bean 的做用範圍,經過value進行取值,其值可取:singleton、prototype、request、session、globalsession

生命週期註解@PostConstruct、@PreDestroy,做用至關於xml中的<bean id="" class="" init-method="" destroy-method=""/>

另外還有一大批註解,將會在下一篇中進行說明。

3、註解和xml兩種配置方式對比

兩種配置方式各有優勢:註解配置簡單,維護方便(找到類,就至關於找到了對應的配置);xml修改時,不用改源碼,不涉及從新編譯和部署。於是具體的配置方式由我的進行選擇。

Spring管理bean方式對比:

基於xml 基於註解
Bean定義 <bean id="" calss=""/> @Component及其衍生註解
Bean名稱 經過id或name指定 @Component("person")
Bean注入 <property>或p命名空間 @Autowired、@Resource
Bean做用範圍、生命週期 init-method、destory-method、scope屬性 @PostConstruct初始化,@PreDestroy銷燬,@Scope做用範圍設置
相關文章
相關標籤/搜索