Java Ioc詳解和實現

来源:http://www.cnblogs.com/chengxuyuanzhilu/archive/2016/02/14/5189221.html
-Advertisement-
Play Games

作者:竹竿 這章我們講Java Spring的Ioc控制反轉, DI依賴註入。 閱讀此文之前,必須深入理解Java反射原理。 1、 Ioc控制反轉 原來類對象實例的創建都是有程式員自己通過new進行的。控制反轉之後,我們把創建對象的功能交給Spring,到時候我們直接用就可以了。 2、 DI註入 c


作者:竹竿

這章我們講Java SpringIoc控制反轉, DI依賴註入。

閱讀此文之前,必須深入理解Java反射原理。

1、 Ioc控制反轉

原來類對象實例的創建都是有程式員自己通過new進行的。控制反轉之後,我們把創建對象的功能交給Spring,到時候我們直接用就可以了。

2、 DI註入

class Bclass

{ …….

}

class Aclass{

 Bclass b; 

}

比如我們需要用到Aclass的對象Aobject時候,Spring Ioc幫我們創建了一個對象。這時候Aobject 裡面的b屬性為空。Ioc再創建一個Bclass對象,然後通過set方法讓b屬性引用到Ioc創建的Bclass對象。

3、 模擬Ioc實現

學習一個東西的時候,如果想弄明白,最好想想框架內部是如何實現的,如果是我做我會怎麼實現。下麵我就寫一個Ioc DI的程式。

 

Spring就相當於一個Bean工廠,你寫好自己的bean,輸入配置文件,Spring就可以幫你自動生成bean對象。

下麵我們創建一個Java工程SimulateIoc 模擬Ioc

 

dom4j包需要,用來解析XML配置文件

 

我們先寫二個Bean。內容都一樣,只是類名不一樣

 

定義一個Spring配置文件,我們起名字叫IocConfig.xml

 

下麵我們來看一下TestIoc.Java文件

 

看一下運行結果

 

通過這個文件我們可以看出,我們先創建了一個BeanFactory工廠,然後通過getBean方法獲得指定的Bean對象。是不是很神奇,只要通過不同的名字,我們就可以獲得我們想要的對象。BeanFactory裡面到底做了什麼那?

 

這就是整個BeanFactory實現了。

裡面很多都是處理xml的部分,我們主要看上面的兩個標紅的地方。

Class bean = Class.forName(cls.getText());

Object obj = bean.newInstance();

Class.forName獲得指定類的類類。newInstance()獲得指定類的對象。

Method entryPoint = bean.getMethod(attributename, String.class);

entryPoint.invoke(obj,value);

getMethod獲得指定方法的方法調用入口。然後調用invoke就會執行方法。

如果想深入瞭解上面四句。可以看看Class文件的反射機制。或者看我的另外一篇文章。

 

以上Ioc DI實現過程非常簡單,並沒有考慮太多干擾因素和功能。所以和Spring實現不一樣,但是原理都是一樣的。

項目源碼下載地址:http://pan.baidu.com/s/1pKtO5L5


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、exists:sql返回結果集為真;not exists:sql不返回結果集為真。詳解過程如圖: exists not exists
  • 1、show warnings:顯示上一個語句的錯誤、警告以及註意。如圖:
  • 一般來說,轉換函數大家並不陌生。就是使用cast 和 convert 進行數據類型的轉換來達到表達式的比較,語句的拼接等效果。 使用倒是很容易的。一般情況下這樣使用就可以了。 SELECT CONVERT(INT,'123') SELECT CAST('123' AS INT) 還有一個比較少用的,
  • 1、資料庫系統允許的最大可連接數max_connections。這個參數是可以設置的。如果不設置,預設是100。最大是16384。 2、資料庫當前的連接線程數threads_connected。這是動態變化的。 查看max_connections、max_connections的辦法見後。 如果 t
  • ssh username@IP 即可
  • ViewData ViewBag TempData 類型 字典 Dynamic TempDataDictionary 出生時間 MVC1 MVC3 框架版本 .net3.5 .net4.0 是否需要拆裝箱 需要 不需要 存儲數據周期 一次HTTP請求 一次HTTP請求 一次HTTP請求 前後臺調用數
  • 有的時候打開下載的別人的項目時,會出現如下圖的提醒: 將Web.config中“<add key="webpages:Version" value="3.0.0.0" />”修改為“<add key="webpages:Version" value="4.0.0.0" />” 效果如下圖: 修改前:
  • 下載別人的範例,出現由於Nuget套件不存在而無法啟動時: 效果如下圖: 步驟如下: 1.點擊 項目-》啟用NuGet程式包還原 2.點擊下圖中的是 3.點擊下圖中的確定 4.效果如圖: . 5.右擊 引用-》 點擊 管理NuGet程式包 6.點擊左上角的 “還原” 7.效果如下圖:
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...