日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Spring的Autowired自动装配(XML版本+Annotation版本+源码+解析)

發布時間:2024/4/17 asp.net 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring的Autowired自动装配(XML版本+Annotation版本+源码+解析) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://moshowgame.iteye.com/blog/1607718

@Autowired自動裝配

上面的例子我們用的都是手動裝配的,如果DAO-Service一多那就很麻煩了,那么我們需要偷懶一下,然spring去幫我們自動裝配,自動裝配的類型有兩種,一種是byName,一種是byType。

?

*。如果是XML版,只需要在bean里面加個?autowire="byXXX"就行了。

重寫一下DAO.ImpltoString()方法來做測試,看看注入的ID。

@Override

public?String?toString()?{

return?"daoId="?+?daoId;

}

-----------------------------------------------------------------------------------------

?<bean?name="userDAO1"?class="com.bjsxt.dao.impl.UserDAOImpl">

?? <property?name="daoId"?value="1"></property>

??</bean>

??

?<bean?name="userDAO2"?class="com.bjsxt.dao.impl.UserDAOImpl">

?? <property?name="daoId"?value="2"></property>

??</bean>

??<bean?id="userService"?class="com.bjsxt.service.UserService"?scope="prototype"?autowire="byName">

??</bean>

-----------------------------------------------------------------------------------------

?

?①這樣的運行結果是null,因為是byName按名字分配的,沒有和userDAO的名字相同,如果將"userDAO1"改為"userDAO"則輸出daoID=1,同理可得改"userDAO2"為"userDAO"則輸出daoID=2。

?

記得不能兩個同時改為"userDAO",否則報錯,找到兩個同名,不知道配那個。

?

?③如果直接修改?autowire="byType"會報錯,

Error?creating?bean?with?name?'userService'?defined?in?class?path?resource?[beans.xml]:?Unsatisfied?dependency?expressed?through?bean?property?'userDAO':?:?No?unique?bean?of?type?[com.bjsxt.dao.UserDAO]?is?defined:?expected?single?matching?bean?but?found?2:?[userDAO1,?userDAO2];?nested?exception?is?org.springframework.beans.factory.NoSuchBeanDefinitionException:?No?unique?bean?of?type?[com.bjsxt.dao.UserDAO]?is?defined:?expected?single?matching?bean?but?found?2:?[userDAO1,?userDAO2]

就是說找到兩個不知道配哪個好......(?-?-?)

?

④將"userDAO2"的bean<!--?-->注釋掉,然后改autowire="byType"則輸出的是daoID=1.

或將"userDAO1"的bean<!--?-->注釋掉,然后改autowire="byType"則輸出的是daoID=2.

-?-要是兩個同時注釋掉的話,注意是不會報錯,因為沒得裝配了,跟①的情況差不多,只能輸出null。

?

?

Annotation版本的@Autowired自動裝配


?

首先得對UserService類的setter注入做做改進,如果是用constructor則對構造方法進行改進,方法和道理一樣。

?

-----------------------------------------------------------------------------------------

<!--如果XML里面只有一個可以裝配,那么setter直接加個@Autowired以就可以了.-->

?

<bean?id="u1"

?class="com.bjsxt.dao.impl.UserDAOImpl">

??</bean>

-----------------------------------------------------------------------------------------

@Autowired

public?void?setUserDAO(UserDAO?userDAO)?{

this.userDAO?=?userDAO;

}

-----------------------------------------------------------------------------------------

<!--如果XML里面有多個可以裝配,那么setter上面加個@Autowired之外還要在參數里面加個@Qualifier("u1")指定裝配的是哪個對象-->

?

?<bean?id="u1"?class="com.bjsxt.dao.impl.UserDAOImpl">

??</bean>

??<bean?id="u2"?class="com.bjsxt.dao.impl.UserDAOImpl">

??</bean>

-----------------------------------------------------------------------------------------

//加個@Autowired以及指定注入的是u1?@Qualifier("u1")

?

@Autowired

public?void?setUserDAO(@Qualifier("u1")?UserDAO?userDAO)?{

this.userDAO?=?userDAO;

}

?

-----------------------------------------------------------------------------------------

補充:@Resource的用法:

跟@autowired差不多,不過默認是用byName,得名字完全對應才能自動裝配

@Resource

public void setUserDAO( UserDAO userDAO) {

this.userDAO = userDAO;

}

-----------------------------------------------------------------------------------------

? <bean id="userDAO" class="com.bjsxt.dao.impl.UserDAOImpl">

? </bean>

? <bean id="u2" class="com.bjsxt.dao.impl.UserDAOImpl">

? </bean>

-----------------------------------------------------------------------------------------

XML和Annotation版本源碼全部經Junit測試成功!


⊙_⊙最后,按照我的慣例,附上本次的項目源碼三個(XML和Annotation版本,還有補充的@Resource的,源碼來自尚學堂馬士兵),類庫用到三個(spring.jar ?junit.jar(eclipse自帶) commons-logging.jar 缺少類庫到http://moshowgame.iteye.com/admin/blogs/1606825下載)。

^_^還有什么好方法或者疑問和意見歡迎大家提出來一起討論!

?

總結

以上是生活随笔為你收集整理的Spring的Autowired自动装配(XML版本+Annotation版本+源码+解析)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。