Spring IoC原理
Spring IoC(DI)是Spring框架的核心,所有對象的生命周期都是由它們來管理。對于弄懂Spring IOC是相當(dāng)關(guān)鍵,往往我們第一次接觸Spring IOC大家都是一頭霧水。當(dāng)然我們這篇文章會通過程序例子的方式來告訴大家,如果還有不懂的朋友們建議去看一下Spring的官方文檔,或者是參考網(wǎng)上其他的一些博客。
1. Spring IOC的概念
IOC(Inversion of Control,控制反轉(zhuǎn)),所有的Java類(不管是JDK庫中Java類,還是你自己定義Java類)都可以利用Spring框架來new它們的實例化對象
Spring框架完成對Java類的初始化對象工作
Spring來負(fù)責(zé)控制對象的生命周期和對象間的關(guān)系
2. Spring DI的概念
DI(Dependency Injection,依賴注入),它主要作用是動態(tài)的向某個對象提供它所需要的其他對象
3. Spring IoC和DI 它們是否有區(qū)別嗎?
我個人觀點,其實Spring中IOC和DI其實概念一樣
IOC控制反轉(zhuǎn),所有的Java類的初始化工作扔給Spring框架。Spring框架充分利用Java反射
DI依賴注入,一個Java類如果依賴其他Java類,則此類依賴另一個Java類的初始化工作也扔給Spring框架來完成。例如下面的描述可以幫助再次理解DI的核心功能
你可以通過從MVC分層開發(fā)角度去理解一下DI
在開發(fā)過程中,大家都知道Controller控制器依賴Service,假設(shè)整個Web開發(fā)過程中我們使用Spring框架,則Serivce的初始化工作Controller不用關(guān)心Service對象是如何創(chuàng)建的,Service創(chuàng)建過程扔給Spring框架
DI和IOC程序?qū)崿F(xiàn)的原理是什么

4. 上面確實是從我個人角度去理解和告訴大家什么是Spring IOC,下面開始我們的第一個Spring框架的程序。它能告訴你如何編寫一個由Spring框架導(dǎo)向的Java程序
運行Spring框架首先要導(dǎo)入Spring相關(guān)的開發(fā)包。如果使用spring.4.0.3版本導(dǎo)包要包含(spring-core.jar, spring-beans.jar, spring-context.jar, spring-expression.jar, common-logging.jar)
創(chuàng)建一個Person的Java類
public class Person {
?private String name;
?public void setName(String name) {
?this.name = name;
? ? }
?public String getName() {
?return name;
? ? }
}
創(chuàng)建一個Spring的配置文件
<?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="person" class="com.zlt.spring.day01.Person"></bean></beans>
創(chuàng)建一個測試程序來運行一段由Spring框架所管理的配置文件
package com.zlt.spring.test01;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.zlt.spring.day01.Person;
public class Test01 {
? ? @Test
?public void m01() {
?/**
? ? ? ? ?* 運行Spring框架需要用到BeanFactory
? ? ? ? ?* 1.BeanFactory幫助我們啟動IOC容器
? ? ? ? ?* 2.幫助我們找到需要實例化Java對象
?*/
? ? ? ? BeanFactorybeanFactory = new ClassPathXmlApplicationContext("spring.xml");
? ? ? ? Person person = (Person) beanFactory.getBean("person");
? ? ? ? person.setName("Hello World");
? ? ? ? System.out.println(person.getName());
? ? }
}
5. 上面的第一個Spring框架的代碼,我這里簡單的說明一下幾個關(guān)鍵點
以后我們編寫好的Java類都會在Spring的配置文件進行注冊
Spring配置文件就是一個容器工廠,它會在運行程序的時候檢測配置文件中注入的Java類。當(dāng)檢測有Java類在配置文件中,那么Spring框架就會給這些Java類創(chuàng)建對象
BeanFactory是Spring框架中的核心接口,在一個Java應(yīng)用程序運行的時候,它幫助我們啟動IoC容器,同時幫助我們找到需要實例化的Java對象
如何找到需要實例化的Java對象呢?通過BeanFactory接口中的getBean(String beanName)方法來實現(xiàn)
