好開森,今天終於看到利用註解的方式來實現依賴注入了,嘿嘿。
java
主要記錄一下@Request , @Autowried及@Qualifier的用法。因爲這裏的一些文章都是與以前寫的一些小要點有關,並且是依託於同一個開源的項目,因此,一些重複出現的代碼配置啥的,就再也不貼出來了。spring
固然,首先咱們得在配置文件里加一句簡單的context配置,以下所示:app
<context:annotation-config/>
因爲用到了context包中的標籤,因此引入對應的標籤訂義文件是必須的。具體以下所示:
單元測試
<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" 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"> <!-- 這句很重要喲! --> <context:annotation-config/> <!--相關配置 --> </beans>
下面正式開始介紹上面提到的三個註解。
測試
@Request
ui
一個用來檢查的註解,檢查屬性是否已經設置。這樣,在配置裏若是這個被註解的屬性沒有配置,將會拋出BeanCreationException異常,俺也不知道這個註解好很差用,呵呵。this
亮代碼及配置
spa
1.UserDao類代碼:
.net
public class UserDao { private User user; public User getUser() { return user; } @Required public void setUser(User user) { this.user = user; } public void save() { System.out.println("Save user " + user.getName()); } public void save(User user) { System.out.println("Save user " + user.getName()); } }
配置: code
<bean id="userDao" class="org.tunie.learn.spring.ioc.dao.UserDao" > <property name="user" ref="user"/> </bean>
單元測試:
public class UserDaoTest { @Test public void testSave() { ApplicationContext applicationContext = ApplicationContextUtil.getApplicationContext(); UserDao userDao = applicationContext.getBean("userDao", UserDao.class); userDao.save(); assertEquals(userDao.getUser().getName() , "Tunie" ); } }
運行經過!
@Autowried,@Qualifier
@Autowried自動裝配註解,能夠自動裝配對應的屬性,不過因爲容器可能存在多個符合條件的備選bean,因此@Qualifier註解就能夠大顯其手了,它將縮小備選bean的範圍。下面簡單的列取下使用的demo吧。
UserServer:
public class UserServer { private UserDao userDao; public void add(User user) { userDao.save(user); } public UserDao getUserDao() { return userDao; } @Autowired @Qualifier("main") public void setUserDao(UserDao userDao) { this.userDao = userDao; } }
配置:
<bean class="org.tunie.learn.spring.ioc.dao.UserDao"> <qualifier value="main"/> </bean> <bean id="userServer" class="org.tunie.learn.spring.ioc.server.UserServer"/>
即便存在上面的名爲userDao的bean,咱們的userServer仍是能夠很是準確的找到被qualifier標記爲main的一個匿名bean。