IoC和DI的区别
首先我們一般回答面試題都是先說出他們兩個是什么,然后在說他們之間的區別.嘻嘻重點在最后后面
1.IoC(Inverse of Control 反轉控制): 將對象創建權利交給Spring工廠進行管理。
理解IoC
2.DI:Dependency Injection,翻譯過來就是:依賴注入。是指spring框架在創建bean對象時,動態的將依賴對象注入到bean組件中
原來在使用Spring之前: Class UserServiceImpl{ private String msg;public void setMsg( String msg ){ this. msg = msg; } } UserService userService = new UserServiceImpl(); userService.setMsg(“世界”); 使用了Spring之后。我們只需要使用xml配置,或者注解配置。就可以直接注入。擴展UserServiceImpl 添加msg屬性及其setter方法 /*** UserService接口的實現類* @author joedy**/ public class UserServiceImpl implements UserService {private String msg;@Overridepublic void sayHello() {System.out.println("hello " + msg);}// UserServiceImpl的對象,依賴于String類型的msg數據public void setMsg(String msg) {this.msg = msg;}} 通過配置屬性注入 通過property標簽注入依賴數據: <?xml version="1.0" encoding="UTF-8"?> <!-- xml配置的約束頭信息 --> <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"><!-- 配置使用哪個實現類,對UserService接口進行實例化 --><!-- id:唯一標識,通過它獲取配置的實現類。 class:配置UserService這個實現類 --><bean id="userService" class="com.atguigu.spring.quickstart.UserServiceImpl"><!-- spring框架初始化UserService對象后,自動調用該對象的setMsg方法,注入依賴數據:msg --><property name="msg" value="世界"></property></bean></beans> 測試 傳統方式需要修改代碼,spring方式不需要修改任何代碼: public class UserServiceTest {@Testpublic void test1() {// 傳統寫法,緊密耦合UserServiceImpl userService = new UserServiceImpl();// 手動注入userService對象依賴的msg數據userService.setMsg("世界");userService.sayHello();}@Testpublic void test2() {// 反射 + 工廠 + 配置文件,實例化UserService接口對象ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");// 通過工廠根據配置名稱獲取實例化對象UserService userService = (UserService) context.getBean("userService");userService.sayHello();}}IoC和DI的區別?
IoC:控制反轉,指將對象的創建權,反轉到spring容器。
DI:依賴注入,指在創建對象的過程中,將對象依賴的屬性通過配置進行注入。DI的實現依賴于IoC,先有控制反轉才有依賴注入
?
總結
- 上一篇: 海报设计如何做好文案超多的海报
- 下一篇: P23 (**) Extract a g