文章目錄
一、問題
(1)什麼是 IOC?
控制反轉(Inversion of Control,IOC),又稱 “依賴注入”(Dependency Lookup)。
- 通過控制反轉,對象創建和傳遞交由 IOC 容器。
- 有對象引用,則可依賴注入。
所謂IOC
容器就是指的 Spring
中 Bean
工廠裏面的 Map
存儲結構(存儲了Bean
的實例)。
(2)爲什麼要用 IOC?
可以用來降低計算機代碼之間的耦合度。
更好的管理對象本身,對象和對象之間的關係。
優點:
- 管理類的創建、銷燬
- 類與類之間的依賴關係(比如:循環依賴等等)
- 規避對象創建不規範,不一致
- 解耦合
- 讓開發者更關注業務開發
(3)怎麼創建 IOC?
Spring IOC 容器加載Bean
方式有:XML
配置方式 和 註解方式
1. XML
配置方式
通過 bean
標籤
public class Application {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Car car = (Car) applicationContext.getBean("car");
Car car2 = (Car) applicationContext.getBean(Car.class);
}
}
2. 註解方式
- 在對應需要的類上加上註解。
@Component
@Controller
@Service
Repository
等等
- 配置包掃描依賴
context:component-scan
掃描對應包下的註解,將註解的類加載進 IOC 容器
註解方式,示例代碼:
@ComponentScan(basePackages = "com.donaldy")
public class Application {
public static void main(String[] args) {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(Application.class);
Car car = (Car) applicationContext.getBean("car");
}
}
(4)IOC 容器是如何初始化 Bean 實例的?
如圖:
二、一些概念
先了解一些概念和其名字所代表的意思。
(1)BeanFactory
beanFactory: bean 工廠
生產bean
(2)ApplicationContext
applicationContext: 應用上下文
總覽全局
(2)BeanDefinition
definition:定義
即每個bean
都有自己定義的信息:屬性、類名、類型等等
反應對象之間的互相依賴關係