掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
根據(jù)時間安排,今天主要是對spring中IOC的理解。對于IOC的理解可以從以下幾個角度去分析。

成都做網(wǎng)站、網(wǎng)站設(shè)計介紹好的網(wǎng)站是理念、設(shè)計和技術(shù)的結(jié)合。創(chuàng)新互聯(lián)建站擁有的網(wǎng)站設(shè)計理念、多方位的設(shè)計風(fēng)格、經(jīng)驗豐富的設(shè)計團(tuán)隊。提供PC端+手機端網(wǎng)站建設(shè),用營銷思維進(jìn)行網(wǎng)站設(shè)計、采用先進(jìn)技術(shù)開源代碼、注重用戶體驗與SEO基礎(chǔ),將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺化效果。
什么是IOC?如何使用案例來理解?
對于IOC的理解,主要是停留在概念和幾種注入的方式上,雖然知道其生命周期,但是對整個bean管理的宏觀角度,理解的不夠深刻。
IOC:**控制反轉(zhuǎn)(Inversion of Control)容器,**是一種設(shè)計思想。意味著將你設(shè)計好的對象交給容器控制。
1.1 什么是依賴注入
這個概念的理解,我準(zhǔn)備使用一個案例來表示。如果a類中包含了b類,就說明a類對b類產(chǎn)生了依賴。如一個人需要車,這就說人對車產(chǎn)生了依賴。
- class User{
- Car car;
- public User(){
- car=new Car();
- }
- }
上面這個案例,可以看到,在User類中,包含了Car類,也就說User類對Car類產(chǎn)生了依賴。
按照傳統(tǒng)的方式,User類如果想要使用Car基本上就是在內(nèi)部new一個新對象即可。但是這樣做缺點很大,new的方式也就意味著User和Car產(chǎn)生了緊耦合。不利于大規(guī)模使用。于是使用了另外一種方式可以代替。那就是什么時候用到Car,從外部直接傳遞過來就好。這樣的話,耦合性就大大降低了。再看下面這種形式是不是就好很多了。
- class User{
- Car car;
- public User(Car car){
- this.car=car;
- }
- }
像這樣的方式就是依賴注入,也就是把依賴Car注入到了User中。
1.2 什么是控制反轉(zhuǎn)
有了上面依賴注入的概念,再立即控制反轉(zhuǎn)就比較簡單了。
目前主要有五種注入方式:SET注入,構(gòu)造器注入,靜態(tài)工廠,實例工廠。
本文直接使用網(wǎng)上的基本案例來實現(xiàn)。比如UserService依賴UserDao。先把UserDao定義好了,接下來看如何實現(xiàn)注入的。
- public class UserDao {
- public String userLogin() {
- return "userLogin()方法";
- }
- }
下面看幾種依賴注入的幾種實現(xiàn)方式。
2.1 set注入
第一步:XML配置
- 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">
第二步:set方式注入
- public class UserService {
- //一定要提供屬性的setter方法
- private UserDao userDao;
- public void userlogin() {
- String res=userDao.userLogin();
- System.out.println(res);
- }
- public void setUserDao(UserDao userDao) {
- this.userDao = userDao;
- }
- }
這種方式簡單易操作。
2.2 構(gòu)造器注入
第一步:XML配置
- 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">
第二步:構(gòu)造器注入
- public class UserServiceV2 {
- private UserDao userDao;
- private String name;
- public void userlogin() {
- String res=userDao.userLogin();
- System.out.println(res);
- System.out.println(name);
- }
- public UserServiceV2(UserDao userDao,String name) {
- super();
- this.userDao = userDao;
- this.name = name;
- }
- }
2.3 靜態(tài)工廠注入
第一步:XML配置
- 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">
第二步:定義靜態(tài)工廠
- public class StaticFactory {
- public static UserDao createuserDao(){
- return new UserDao();
- }
- }
第三部:靜態(tài)工廠注入
- public class UserService {
- private UserDao userDao;
- public void userlogin() {
- String res=userDao.userLogin();
- System.out.println(res);
- }
- public void setUserDao(UserDao userDao) {
- this.userDao = userDao;
- }
- }
2.4 實例化工廠
第一步:XML配置
- 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">
第二步:工廠注入
- public class InstanceFactory {
- public UserDao createUserDao(){
- return new UserDao();
- }
- }
以上就是幾種常見的注入方式。在開發(fā)中比較常用。知道了IOC的概念和幾種實現(xiàn)方式之后,下面主要探討IOC的底層實現(xiàn)原理。
以上的幾種注入方式,可能有個疑問,那就是bean是如何從xml,再到注入類中的呢?看下面這張圖
Spring IOC容器初始化的核心過程主要有四個步驟(還有一些如:后置加載器,國際化,事件廣播器等一些過程不展開):
這張圖是核心的過程。這個過程是已經(jīng)簡化了,具體的實現(xiàn)方式要設(shè)計到bean的生命周期的管理。安排到下一章節(jié)了。spring的核心內(nèi)容就是aop和ioc,知道了這倆是如何實現(xiàn)的之后,就是核心bean管理的核心實現(xiàn),最后對配置文件進(jìn)行介紹。
本文轉(zhuǎn)載自微信公眾號「愚公要移山」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系愚公要移山公眾號。

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流