Annotation註解:
JDK1.5之後開始提供支持
在Spring IoC部分中,對於bean的配置,有兩種方式,一種是通過xml來配置,另外一種就是使用Annotation
@Autowired註解的意思是自動裝配(自動注入屬性)
比如我們有一個UserDAO需要被注入,我們可以這樣寫:
<bean id="u1" class="com.ccniit.dao.impl.UserDAOImpl"></bean>
其中UserDAOImpl是UserDAO的實現類,UserDAO是一個接口
在java代碼中,我們這樣將 u 注入進去:
@Autowired會自動的在xml文件中尋找與UserDAO類型相同的bean並且注入進去(經過簡單的實驗,xml文件中只能有一個UserDAO的bean,否則會報錯)
private UserDAO userDAO;
@Autowired
public void setUserDAO(UserDAO userDAO)
{
this.userDAO = userDAO;
}
這樣之後,我們就能使用這個userDAO了,如果這裏不加@Autowired註解,xml配置文件裏面也沒有進行ref方式的注入,那麼,運行程序的時候會報userDAO的空指針錯誤
上面說過,@Autowired是尋找類型注入的所以是byType類型,所以兩個相同的類型會報錯誤,怎麼解決這個問題呢?
這裏我們就要用到@Qualifier了,如下:
xml:
<bean id="u1" class="com.ccniit.dao.impl.UserDAOImpl">
<property name="uId" value="1"></property>
</bean>
<bean id="u2" class="com.ccniit.dao.impl.UserDAOImpl">
<property name="uId" value="2"></property>
</bean>
java:
@Autowired
@Qualifier(value = "u2")
public void setUserDAO(UserDAO userDAO)
{
this.userDAO = userDAO;
}
這樣,我們找到的就是id爲u2的類,爲了區分它們,我們給這個實現類加一個ID值分別賦值爲1和2,在上面的xml代碼中有體現了。
u2的運行打印結果:
uId = 2
u1的運行打印結果:
uId = 1