依賴注入(DI)和控制反轉(IoC)


依賴注入(DI)和控制反轉(IoC)

控制反轉

控制反轉,當某個Java對象(調用者)需要調用另一個Java對象(被調用者,即被依賴對象)時,在傳統模式下,調用者通常會采用“new 被調用者”的代碼方式來創建對象,這種方式會導致調用者與被調用者之間的耦合性增加,不利於后期項目的升級和維護。

在使用Spring框架之后,對象的實例不再由調用者來創建,而是由Spring容器來創建(本質是反射機制),Spring容器會負責控制程序之間的關系,而不是由調用者的程序代碼直接控制。這樣,控制權由應用代碼轉移到Spring容器,控制權發生了反轉,這就是Spring的控制反轉。

依賴注入

實際上,依賴注入和控制反轉的含義相同,只不過這兩個稱呼是從兩個角度描述的統一概念。

從Spring容器的角度來看,Spring容器負責將被依賴對象賦值給調用者的成員變量,這相當於為調用者注入了它依賴的實例。

依賴注入的實現方式

  • 屬性setter方法注入

  • 構造器方法注入

下面主要解釋一下屬性setter方法注入

public interface UserDao {
   public void say();
}
public class UserDaoImpl implements UserDao{
   @Override
   public void say() {
       System.out.println("userDao say hello World!");
  }
}
public interface UserService {
  public void say();
}
public class UserServiceImpl implements UserService{
   private UserDao userDao;

   //通過setter()依賴注入
   public void setUserDao(UserDao userDao) {
       this.userDao = userDao;
  }

   @Override
   public void say() {
       userDao.say();
       System.out.println("userService say hello World!");
  }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd">
   <bean id="userDao" class="com.itheima.ioc.UserDaoImpl"></bean>
   <bean id="userService" class="com.itheima.ioc.UserServiceImpl">
       <!-- 依賴注入     -->
       <!-- 將id為userDao的Bean實例注入到userService實例中     -->
       <property name="userDao" ref="userDao"></property>
   </bean>
</beans>
public class TestDI {
   public static void main(String[] args) {
       ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
       UserService userService = (UserService) applicationContext.getBean("userService");
       userService.say();
  }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM