Spring依賴注入有哪些方式?哪些實現方式?

有4種依賴注入方式

  1. Set方法注入:注入是最簡單、最常用的注入方式,支持註解+xml。
  2. 構造器注入:是指帶有參數的構造函數注入,支持註解+xml。
  3. 靜態工廠的方法注入:通過調用靜態工廠的方法來獲取自己需要的對象,只支持xml。
  4. 實例工廠的方法注入:獲取對象實例的方法不是靜態的,所以你需要首先new工廠類,再調用普通的實例方法,只支持xml。

有2 種實現方式

  1. 註解(如@Autowired,@Resource,@Required)
  2. 配置文件(如xml)

代碼演示:

1.set-註解方式

 public class UserService {

 //註解注入(autowire註解默認使用類型注入)
 @Autowired //【看這裏】
 private UserDao userDao;

 public void login() {
 userDao.login();
    }
 }

2.set-xml

 <bean name="userService" class="com.obob.service.UserService">
 <property name="userDao" ref="userDao" /><!--這裏是property-->
 </bean>
 <bean name="userDao" class="com.obob.dao.UserDao"></bean>

3.構造-註解方式

 public class UserService {
 private UserDao userDao;
 //註解到構造方法處
 @Autowired //【看這裏】
 public UserService(UserDao userDao) {
 this.userDao = userDao;
    }
 public void login() {
 userDao.login();
    }
 }

4.構造-xml方式

 <bean name="userService" class="com.obob.service.UserService">
 <constructor-arg index="0" ref="userDao"></constructor-arg> <!--這裏是constructor-arg-->
 </bean>
 <bean name="userDao" class="com.obob.dao.UserDao"></bean>

5.靜態工廠-xml

 <bean name="userService" class="com.obob.service.UserService">
 <property name="staticUserDao" ref="staticUserDao" /><!--property屬性-->
 </bean>
 <!--UserDao staticUserDao=Factory.initUserDao() -->
 <bean name="staticUserDao" class="com.obob.Factory" factory-method="initUserDao"></bean>

6.實例工廠-xml

 <bean name="userService" class="com.obob.service.UserService">
 <property name="staticUserDao" ref="staticUserDao" />
 </bean>
 <!--UserDao staticUserDao=factory.initUserDao() -->
 <bean name="staticUserDao" factory-bean="factory" factory-method="initUserDao"></bean>
 
 <!--Factory factory = new Factory() -->
 <bean name="factory" class="com.obob.Factory"></bean>

7.瞭解@bean的方式

 @Configuration
 public class AppConfig {
     // 使用@Bean 註解表明myBean需要交給Spring進行管理
     // 未指定bean 的名稱,默認採用的是 "方法名" + "首字母小寫"的配置方式
     @Bean
     public MyBean myBean(){
         return new MyBean();
    }
 }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章