1. 程式人生 > >-控制反轉:削減 (降低)依賴 ----》IOC的xml配置

-控制反轉:削減 (降低)依賴 ----》IOC的xml配置

通過 2種建立物件的方式 來 理解 IOC

傳統的 建立------.
直接new: 有自主 的 ----會消耗更多的
明顯的依賴關係
APP–1資源- APP-2資源- APP–3資源- APP–4資源
IOC-----》通過工廠----》獲取 資源的
你可以在 你的類裡 既可以 new到 也可以 用工廠 去做===把控制器 交給 框架 或工廠
自己做 也可以讓 框架 或 工廠來做
》 控制 反轉---------》更切近 面對象思想!

將建立物件的權利 交給工廠Factory
用工廠來 建立物件—》由BeanFactory----是根據 (無法自主 控制)
獲取: 通過key 來確定

強調的一點 IOC
並不能實現資料庫的增刪改查 也不能 表現層的 請求引數封裝 也無法接受請求
那麼IOC 的解耦 有多大的功能 ????
— IOC ----》就是解耦 與 減低程式的 依賴關係

–ioc的概念和作用-------------------------》 開發包===》

Spring的原始碼裡 -------------》
dist —》libs :裡jar包 copy是沒有任何字尾的
sources----》原始碼
有註釋—《就是關聯 了》
AOP 文件要解壓就行 ----》
maven專案 直接就座標
在 右上角 要記得收藏

首先

—spring中的Ioc前期準備--------------------------》

Spring 的dest :開發包 在 資料裡 原始碼裡 ----》
docs : n. 說明檔案;文獻 API
SpringFramwork-reference======》我們找的是的名為 :index.html 檔案的
用瀏覽器 開啟 加上你的瀏覽器的 收藏-----》Spring的都是英文的

libs:-----jar包 63個每3個一組 其實就21個 —》沒有後綴的檔案
原始碼在sources----》原始碼
schema:概要----》裡有xml 的約束
-------------我的 F盤裡的 ----路徑
F:\32web\day34_Spring_Importance\spring_day01\資料/spring-framework-5.0.2.RELEASE-dist/spring-framework-5.0.2.RELEASE/docs/spring-framework-
reference/core.html#spring-core
*


—spring基於XML的IOC環境搭建和入門-------------------》

擷取的 Spring框架文件

版本5.0.2.RELEASE
歡迎使用Spring Framework參考文件!

請閱讀概述以獲得快速介紹,包括簡要歷史,設計理念,提問問題以及入門提示。有關“什麼是新的”或“從以前的版本遷移”的資訊,請檢視 Github Wiki。

參考文件分為幾個部分:

核心
IoC容器,事件,資源,i18n,驗證,資料繫結,型別轉換,SpEL,AOP。

測試
模擬物件,TestContext框架,Spring MVC測試,WebTestClient。

資料訪問
事務,DAO支援,JDBC,ORM,編組XML。

Web Servlet
Spring MVC,WebSocket,SockJS,STOMP訊息傳遞。

網路反應
Spring WebFlux,WebClient,WebSocket。

積分
遠端處理,JMS,JCA,JMX,電子郵件,任務,排程,快取。

語言
Kotlin,Groovy,動態語言。

版本5.0.2.RELEASE
上次更新2017-11-27 10:24:45 UTC
0–

–我們點選核心 core:的介面

Ctrl+F—>輸入:xmlns 就速到我們要配置xml 的約束檔案

<bean id="accountService" class="com.fhw.service.impl.IAccountServiceImpl"></bean>


我們就把Spring的那個map容器獲取到
{

   //獲取 spring 的核心容器物件:  引數就是 bean.xml
    ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");
    IAcconutService as = (IAcconutService)ac.getBean("accountService");
    IAccountDao adao=ac.getBean("accountDao",IAccountDao.class);
    System.out.println(as);
    System.out.println(adao);

-----bean.xml裡的配置

<?xml version="1.0" encoding="UTF-8"?>






編寫 過程-----------------------------------------------》
id="accountService"的自己起個名稱
class="com.fhw.service.impl.IAccountServiceImpl: 具體些的時候P編輯器 有 提示

dao 與Service 的程式碼 與上一個:一樣的

測試類裡的 -----------》

package com.fhw.ui;

import com.fhw.dao.IAccountDao;
import com.fhw.service.IAcconutService;
import com.fhw.service.impl.IAccountServiceImpl;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

/在模擬一個表現層 呼叫業務層 (實際裡這裡就是一個 servlet)/
public class Client {
/**
* 獲取 spring 的核心容器 根據id 獲取物件
* @param args
*/
public static void main(String[] args) {

   //獲取 spring 的核心容器物件 有3個:其中2個 :

    // 3:AnnotationConfigApplication:  註解開發
   /* ApplicationContext fsxac = new FileSystemXmlApplicationContext("D:\\develop\\SpringStudy\\SpringEditCode\\fhw01_03spring_ioc\\src\\main\\resources\\bean.xml");
    IAcconutService as_fsxac = (IAcconutService)fsxac.getBean("accountService");
    System.out.println("第2種:FilSystemxmlApplicationContext:載入磁碟限定額配置檔案"+as_fsxac+"------------------------");
    IAcconutService as = (IAcconutService)ac.getBean("accountService");
    IAccountDao adao=ac.getBean("accountDao",IAccountDao.class);
    System.out.println(as);
    System.out.println(adao);*/
    // as.saveAccount();
    /*-核心容器 的兩個介面 的載入問題 ApplicationContext----》立即載入
     BeanFactory -----》延遲載入 的 用的時候再載入
    立即載入 ---》常規的 方式
    ------ BeanFactory  用的是過時方法來驗證 debug測試 建立的-------
    *    */
    ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");

// BeanFactory factory = new XmlBeanFactory(resource);
IAcconutService as = (IAcconutService)ac.getBean(“accountService”);
as.saveAccount();

   ac.close();

}

}

—ApplicationContext的三個實現類-------------------》

我們在 IDEA編輯器 裡
找尋介面的實現類====滑鼠 右鍵 點選選中 — Diagrams —shou Diagrams得到 繼承圖
再 點選 shou implementestion :實現類
再 點選 shou Parentes :父介面
獲取spring 的核心容器 Application 具體的實現類 有3個

ApplicationContext的

1: ClassPathXmlApplicationContext:載入類路徑 下的配置檔案 沒有 就異常
類路徑: 類路徑 上和 web 專案一致
2:FilSystemxmlApplicationContext:載入磁碟限定額配置檔案 (需要訪問許可權)—》接到對 方的 顯然 硬碟不可移動的侷限 (雖然只可以在本機裡 放到 任意 本機 地方

但是 不認識程式 的人把這個刪了 就完蛋了):
3:AnnotationConfigApplication: 註解開發

----BeanFactory(延遲)和ApplicationContext的(立即 )區別 — 載入 -----------------》

ApplicationContext: 他在建立容器的 立即載入 的建立物件----》當前配置檔案 就建立相關的物件
測試:加上建構函式 sout 以個物件建立了
找到工廠的 配置檔案
然可以 使用
BeanFavtory 使用的了 延遲載入 的 方式
‘’
需求: 延遲載入的 單例模式 思想--------

–spring中bean的細節之作用範圍-------------------------》

在這裡插入圖片描述
bean 預設是:單例
bean的scope屬性的範圍
取值 1: singleton :單例:(預設)
2:prototype:多例:
3:request----一次請求web應用
4: session—一次會話
5:全域性的global-sessionc
看做一個Session 一次會話:global-sessionc

描述 一下 global 的使用場景:

從瀏覽器裡 到伺服器 之間通過網址來 登入伺服器 有多臺伺服器 都有義務 閒置的伺服器會為你服務 :你的請求 在瀏覽器被儲存 在Cookie裡 在伺服器 裡 被儲存在

session裡 比如: 使用者名稱 密碼 驗證碼 : 其中驗證碼 :你這次登入的資訊 當你下次登入的時候 的伺服器 (伺服器是非同步 服務的) 會無法登入 這在 global session

的 裡面 就會 將你 初次的資訊讓所有伺服器共享 確保你資訊 就可以繼續登入

負載均衡----》靠軟體 絕對沒有硬體的的好

—spring中bean的細節之生命週期----單例 與 多例--------------》
單例: 容器建立–》立即(載入)建立 隨著 容器銷燬
多例: 呼叫獲取物件的時候 ----GC機制
Spring不知道他不會------》待 --java的GC 機制
Bean 標籤中屬性:
init : 在javaBean物件銷燬的時候 執行該屬性

總結:IOC 是控制反轉

spring的依賴注入 DI------------------》
依賴注入 D I: 建立物件 賦值交給框架來處理管理