1. 程式人生 > 實用技巧 >Spring中Bean之間的依賴的實現方式dv發的個

Spring中Bean之間的依賴的實現方式dv發的個

解決Spring中Bean之間的依賴的實現方式,在Spring的概念中就被稱之為依賴注入(Dependency Injection,DI)。普遍認為的Spring依賴注入的實現方式有三種:構造方法注入、setter方法注入、註解注入。但,就我而言,我認為應該劃分為兩種形式——基於XML注入和基於註解注入,然後再細分為下面的形式:

DI實現.png

基於XML的注入方式是我們最先學習和使用的方式,也是最熟悉的方式,就簡單的做個介紹,舉個例子。

通過構造方法注入
public class UserServiceImpl implements UserService {

private UserDao userDao;

public UserServiceImpl(UserDao userDao) {
    this.userDao = userDao;
}

/**繼承自UserService的方法**/

首先定義一個服務層UserServiceImpl,然後在其內部增加對dao層的引用userDao。

接下來就是新增一個構造方法public UserServiceImpl(UserDao userDao)以待Spring通過這個方法為userDao注入例項。

最後在Spring XML配置檔案中注入相應的bean例項。

通過構造方法的注入,必須要注入類中具有對應的構造方法,若沒有對應的構造方法,會出現報錯。

通過setter方法注入
修改UserServiceImpl.java為:

public class UserServiceImpl implements UserService {

private UserDao userDao;

public void setUserDao(UserDao userDao) {
    this.userDao = userDao;
}

/**繼承自UserService的方法**/

}

再修改XML檔案內容為:

這兩種方式的區別在於,一、UserServiceImpl.java可以不用新增構造方法,但是必須存在一個無參構造方法(如public UserServiceImpl(),示例裡面沒寫,是因為java預設會提供一個無參構造方法)以供Spring 容器註冊生成Bean(如userService)。二、XML檔案中,採用構造方法注入時,需要使用

這對標籤;而在setter方法注入時,使用標籤。

在XML注入過程中,除了使用ref=""引用之外,還可以使用value=""設定具體的值,其效果和使用註解@Value差不多。

基於註解的依賴注入
@Autowired