依賴注入 DI:由容器動態(tài)地將某種依賴關(guān)系注入到組件中业舍。
假設(shè)一個類 MyAction
中需要一個數(shù)據(jù)訪問類的實例 MyDAO
眷蜓。
set 方法注入
public class MyAction {
private MyDAO dao;
// 提供一個 set 方法
public void setMyDAO(MyDAO dao) {
this.dao = dao;
}
}
配置文件:
<!-- 配置 MyDAO 的實例 dao -->
<bean name="dao" class="MyDAO">
<property name="host" value="..." />
...
</bean>
<!-- 配置 MyAction 的實例 action -->
<bean name="action" class="MyAction">
<!-- 注入 dao 這個 bean -->
<property name="dao" ref="dao" />
...
</bean>
構(gòu)造方法注入
public class MyAction {
private MyDAO dao;
// 提供一個包含 dao 的構(gòu)造方法
public MyAction(MyDAO dao) {
this.dao = dao;
}
}
配置文件:
<!-- 配置 MyDAO 的實例 dao -->
<bean name="dao" class="MyDAO">
<property name="host" value="..." />
...
</bean>
<!-- 配置 MyAction 的實例 action -->
<bean name="action" class="MyAction">
<!-- 注入 dao 這個 bean -->
<constructor-arg ref="dao" />
...
</bean>
自動裝配
Spring 2.5 開始提供了基于注解的自動裝配機制來簡化依賴注入肛宋。
-
@Autowired
:基于 類型 的自動裝配注入 -
@Resource
:基于 名稱 的自動裝配注入
例如:
public class MyAction {
@Resource(name="dao")
private MyDAO dao;
}
以上的 @Resource
代碼替換了如下的操作:
// set 方法
public void setMyDAO(MyDAO dao) {
this.dao = dao;
}
<!-- 配置 MyAction 的實例 action -->
<bean name="action" class="MyAction">
<!-- 注入 dao 這個 bean -->
<property name="dao" ref="dao" />
...
</bean>