日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring简介与IOC容器

發布時間:2023/12/20 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring简介与IOC容器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、Spring簡介

開源:源碼公開、免費試用;

簡化:簡化企業級開發。

解耦:耦合度降低、可插拔,便于后續維護更新升級拓展。

二、Sping核心模塊

?

Spring 框架的這些模塊可以滿足一切企業級應用開發的需求,在開發過程中可以根據需求有選擇性地使用所需要的模塊。

官網:Spring | Home

Core 核心模塊:提供了 Spring 框架的基本組成部分,包括 IoC 和 DI 功能。

Context 上下文模塊:建立在核心和 Beans 模塊的基礎之上,它是訪問定義和配置任何對象的媒介。ApplicationContext 接口是上下文模塊的焦點。

三、Spring IOC

1、基礎概念

容器:Spring 是一個容器,因為它包含并且管理應用對象的生命周期

控制反轉:IOC (Inversion of Control),指的是將對象的創建權交給 Spring 去創建。

使用 Spring 之前,對象的創建都是由我們自己在代碼中 new 創建。而使用 Spring之后。對象的創建都是由給了 Spring 框架。

IOC (Inversion of Control) 是指在程序開發中,對象實例的創建不再由調用者管理,而是由 Spring 容器創建。Spring 容器會負責控制程序之間的關系,而不是由程序代碼直接控制,因此,控制權由程序代碼轉移到了 Spring 容器中,控制權發生了反轉,這就是 Spring 的 IOC 思想

IOC容器的概念:IOC 容器就是具有依賴注入功能的容器,IOC 容器負責實例化、定位、配置應用程序中的對象及建立這些對象間的依賴。應用程序無需直接在代碼中 new 相關的對象,應用程序由 IOC 容器進行組裝。在 Spring 中 BeanFactory 是 IOC 容器的實際代表者。

Bean的概念在 Spring 中,被 Spring 容器所管理的對象稱之為”Bean”對象。一個 Spring 的 Bean 對象可以是任何形式的 POJO。

依賴注入:DI (Dependency Injection),是指依賴的對象不需要手動調用 setXX 方法去設置,而是通過配置賦值。

2、核心API

SpringIOC容器類型:Spring 提供了兩種 IoC 容器,分別為 BeanFactoryApplicationContext

BeanFactory 是基礎類型的 IoC 容器。它由org.springframework.beans.facytory.BeanFactory 接口定義,并提供了完整的 IoC服務支持。簡單來說, BeanFactory 就是一個管理 Bean 的工廠,它主要負責初始化各種Bean,并調用它們的生命周期方法。

ApplicationContext 是 BeanFactory 的子接口,也被稱為應用上下文。

ClassPathXmlApplicationContext:該 類 從 類 路 徑 ClassPath 中 尋 找 指 定 的 XML 配 置 文 件 , 找 到 并 裝 載 完 成ApplicationContext 的實例化工作。

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#000000">ApplicationContext</span> <span style="color:#000000">applicationContext</span> <span style="color:#981a1a">=</span> <span style="color:#770088">new</span> ? <span style="color:#000000">ClassPathXmlApplicationContext</span>(<span style="color:#008855">String</span> <span style="color:#000000">configLocation</span>);</span></span>

四、Spring IOC容器的使用

使用Spring之前的痛點:對象自己創建,每次修改源碼都需要重新編譯,耦合度過高,不便于后續更新升級。

下面以找對象為例。

?

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#770088">interface</span> <span style="color:#0000ff">GirlFriend</span> {<span style="color:#008855">void</span> <span style="color:#000000">say</span>(); }</span></span>

實現類:

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500">// 吳俊峰找女朋友的標準</span> <span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">GirlfriendImplWJF</span> <span style="color:#770088">implements</span> <span style="color:#000000">GirlFriend</span>{<span style="color:#555555">@Override</span><span style="color:#770088">public</span> <span style="color:#008855">void</span> <span style="color:#000000">say</span>() {<span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#aa1111">"小峰峰"</span>);} }</span></span>

實現類2:

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#aa5500">// 楊涵找女朋友的標準</span> <span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">GirlfriendImplYh</span> <span style="color:#770088">implements</span> <span style="color:#000000">GirlFriend</span>{<span style="color:#555555">@Override</span><span style="color:#770088">public</span> <span style="color:#008855">void</span> <span style="color:#000000">say</span>() {<span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#aa1111">"小涵涵"</span>);} }</span></span>

測試:

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">TestGirlfriend</span> {<span style="color:#770088">public</span> <span style="color:#770088">static</span> <span style="color:#008855">void</span> <span style="color:#000000">main</span>(<span style="color:#008855">String</span>[] <span style="color:#000000">args</span>) {<span style="color:#aa5500">/*GirlFriend gf = new GirlfriendImplWJF();</span><span style="color:#aa5500">gf.say();*/</span><span style="color:#aa5500">// 任玉濤要換成楊涵的標準,強耦合,每次都需要修改源碼,重新編譯</span><span style="color:#000000">GirlFriend</span> <span style="color:#000000">gf</span> <span style="color:#981a1a">=</span> <span style="color:#770088">new</span> <span style="color:#000000">GirlfriendImplYh</span>();<span style="color:#000000">gf</span>.<span style="color:#000000">say</span>();} }</span></span>

1、搭建項目

2、通過 IOC 容器管理 Bean 對象

2.1 配置主配置文件application_context.xml

?

配置內容如下:

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555"><?xml</span> <span style="color:#555555">version="1.0" encoding="UTF-8"?></span> <span style="color:#117700"><</span><span style="color:#117700">beans</span> <span style="color:#0000cc">xmlns</span>=<span style="color:#aa1111">"http://www.springframework.org/schema/beans"</span><span style="color:#0000cc">xmlns:xsi</span>=<span style="color:#aa1111">"http://www.w3.org/2001/XMLSchema-instance"</span><span style="color:#0000cc">xsi:schemaLocation</span>=<span style="color:#aa1111">"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"</span><span style="color:#117700">></span><span style="color:#aa5500"><!--scope屬性值:singleton表示單例模式(默認值),prototype 表示原型--></span><span style="color:#117700"><</span><span style="color:#117700">bean</span> <span style="color:#0000cc">id</span>=<span style="color:#aa1111">"girlFriendWJF"</span> <span style="color:#0000cc">class</span>=<span style="color:#aa1111">"com.dyh.pojo.impl.GirlfriendImplWJF"</span><span style="color:#0000cc">scope</span>=<span style="color:#aa1111">"singleton"</span><span style="color:#117700">></span> ?<span style="color:#117700"></</span><span style="color:#117700">bean</span><span style="color:#117700">></span><span style="color:#117700"><</span><span style="color:#117700">bean</span> <span style="color:#0000cc">id</span>=<span style="color:#aa1111">"girlFriendYh"</span> <span style="color:#0000cc">class</span>=<span style="color:#aa1111">"com.dyh.pojo.impl.GirlfriendImplYh"</span><span style="color:#0000cc">scope</span>=<span style="color:#aa1111">"prototype"</span><span style="color:#117700">></span> ?<span style="color:#117700"></</span><span style="color:#117700">bean</span><span style="color:#117700">></span> <span style="color:#117700"></</span><span style="color:#117700">beans</span><span style="color:#117700">></span></span></span>

2.2 測試TestGirlfriendSpringIOC.java

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">package</span> <span style="color:#0000ff">com</span>.<span style="color:#000000">dyh</span>.<span style="color:#000000">test</span>; ? <span style="color:#770088">import</span> <span style="color:#000000">com</span>.<span style="color:#000000">dyh</span>.<span style="color:#000000">pojo</span>.<span style="color:#000000">iter</span>.<span style="color:#000000">GirlFriend</span>; <span style="color:#770088">import</span> <span style="color:#000000">org</span>.<span style="color:#000000">springframework</span>.<span style="color:#000000">context</span>.<span style="color:#000000">ApplicationContext</span>; <span style="color:#770088">import</span> <span style="color:#000000">org</span>.<span style="color:#000000">springframework</span>.<span style="color:#000000">context</span>.<span style="color:#000000">support</span>.<span style="color:#000000">ClassPathXmlApplicationContext</span>; ? <span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">TestGirlfriendSpringIOC</span> {<span style="color:#770088">public</span> <span style="color:#770088">static</span> <span style="color:#008855">void</span> <span style="color:#000000">main</span>(<span style="color:#008855">String</span>[] <span style="color:#000000">args</span>) {<span style="color:#aa5500">// ac 是一個Spring IoC 容器,需要的時候去容器中獲取,不需要new</span><span style="color:#000000">ApplicationContext</span> <span style="color:#000000">ac</span> <span style="color:#981a1a">=</span> <span style="color:#770088">new</span> <span style="color:#000000">ClassPathXmlApplicationContext</span>(<span style="color:#aa1111">"application_context.xml"</span>);<span style="color:#aa5500">//GirlFriend girlFriend = (GirlFriend) ac.getBean("girlFriendWJF");</span><span style="color:#aa5500">/*GirlFriend girlFriend = (GirlFriend) ac.getBean("girlFriendYh");</span><span style="color:#aa5500">girlFriend.say();</span><span style="color:#aa5500">System.out.println(girlFriend);</span><span style="color:#aa5500">girlFriend = (GirlFriend) ac.getBean("girlFriendYh");</span><span style="color:#aa5500">System.out.println(girlFriend);*/</span><span style="color:#000000">GirlFriend</span> <span style="color:#000000">girlFriend</span> <span style="color:#981a1a">=</span> (<span style="color:#000000">GirlFriend</span>) <span style="color:#000000">ac</span>.<span style="color:#000000">getBean</span>(<span style="color:#aa1111">"girlFriendWJF"</span>);<span style="color:#000000">girlFriend</span>.<span style="color:#000000">say</span>();<span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#000000">girlFriend</span>);<span style="color:#000000">girlFriend</span> <span style="color:#981a1a">=</span> (<span style="color:#000000">GirlFriend</span>) <span style="color:#000000">ac</span>.<span style="color:#000000">getBean</span>(<span style="color:#aa1111">"girlFriendWJF"</span>);<span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#000000">girlFriend</span>);} }</span></span>

五、Spring IOC 容器創建 Bean 對象的三種方式

1、通過構造方法創建Bean

上面案例就是,也就是如下配置,會調用GirlfriendImplYh類默認的無參構造方法實實例化對象得到id為girlFriendYh的一個Bean。

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#117700"><</span><span style="color:#117700">bean</span> <span style="color:#0000cc">id</span>=<span style="color:#aa1111">"girlFriendYh"</span> <span style="color:#0000cc">class</span>=<span style="color:#aa1111">"com.dyh.pojo.impl.GirlfriendImplYh"</span><span style="color:#0000cc">scope</span>=<span style="color:#aa1111">"prototype"</span><span style="color:#117700">></span> ?<span style="color:#117700"></</span><span style="color:#117700">bean</span><span style="color:#117700">></span></span></span>

2、通過靜態工廠

2.1 靜態工廠類

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">GirlFriendFactory</span> {<span style="color:#770088">public</span> <span style="color:#770088">static</span> <span style="color:#000000">Girlfriend</span> <span style="color:#000000">getGirlFriendFJC</span>(){<span style="color:#770088">return</span> <span style="color:#770088">new</span> <span style="color:#000000">GirlfriendFJC</span>();}<span style="color:#770088">public</span> <span style="color:#770088">static</span> <span style="color:#000000">Girlfriend</span> <span style="color:#000000">getGirlFriendCWS</span>(){<span style="color:#770088">return</span> <span style="color:#770088">new</span> <span style="color:#000000">GirlfriendCWS</span>();} }</span></span>

2.2 application_context.xml配置

靜態工廠內部的方法都為靜態方法,靜態方法可以通過對象名直接方法,故不需要配置工廠相關的bean,只需要配置class和factory-method,也就是告訴Spring容器創建對象的時候使用那個工廠的哪個靜態方法,如下所示:

<span style="background-color:#f8f8f8"><span style="color:#333333"> ? ?<span style="color:#aa5500"><!--表示使用靜態工廠GirlFriendFactory的getGirlFriendFJC方法創建id為gf_Factory_fjc的對象--></span><span style="color:#117700"><</span><span style="color:#117700">bean</span> <span style="color:#0000cc">id</span>=<span style="color:#aa1111">"gf_Factory_fjc"</span> <span style="color:#0000cc">class</span>=<span style="color:#aa1111">"com.dyh.factory.GirlFriendFactory"</span><span style="color:#0000cc">factory-method</span>=<span style="color:#aa1111">"getGirlFriendFJC"</span><span style="color:#117700">></span> ?<span style="color:#117700"></</span><span style="color:#117700">bean</span><span style="color:#117700">></span><span style="color:#117700"><</span><span style="color:#117700">bean</span> <span style="color:#0000cc">id</span>=<span style="color:#aa1111">"gf_Factory_cws"</span> <span style="color:#0000cc">class</span>=<span style="color:#aa1111">"com.dyh.factory.GirlFriendFactory"</span><span style="color:#0000cc">factory-method</span>=<span style="color:#aa1111">"getGirlFriendCWS"</span><span style="color:#117700">></span> ?<span style="color:#117700"></</span><span style="color:#117700">bean</span><span style="color:#117700">></span></span></span>

2.3 測試

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">TestGirlfriendSpringIoC</span> {<span style="color:#770088">public</span> <span style="color:#770088">static</span> <span style="color:#008855">void</span> <span style="color:#000000">main</span>(<span style="color:#008855">String</span>[] <span style="color:#000000">args</span>) {<span style="color:#000000">ApplicationContext</span> <span style="color:#000000">ac</span> <span style="color:#981a1a">=</span><span style="color:#770088">new</span> <span style="color:#000000">ClassPathXmlApplicationContext</span>(<span style="color:#aa1111">"application_context.xml"</span>);<span style="color:#aa5500">// 從Spring IoC容器中獲取對象</span><span style="color:#000000">Girlfriend</span> <span style="color:#000000">girlFriend</span> ?<span style="color:#981a1a">=</span> (<span style="color:#000000">Girlfriend</span>) <span style="color:#000000">ac</span>.<span style="color:#000000">getBean</span>(<span style="color:#aa1111">"gf_Factory_cws"</span>);<span style="color:#000000">girlFriend</span>.<span style="color:#000000">say</span>();<span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#000000">girlFriend</span>);} }</span></span>

3、通過動態工廠

3.1 動態工廠

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">DynamicGirlFriendFactory</span> {<span style="color:#770088">public</span> <span style="color:#000000">Girlfriend</span> <span style="color:#000000">getGirlFriendFJC</span>(){<span style="color:#770088">return</span> <span style="color:#770088">new</span> <span style="color:#000000">GirlfriendFJC</span>();}<span style="color:#770088">public</span> <span style="color:#000000">Girlfriend</span> <span style="color:#000000">getGirlFriendCWS</span>(){<span style="color:#770088">return</span> <span style="color:#770088">new</span> <span style="color:#000000">GirlfriendCWS</span>();} }</span></span>

3.2 application_context.xml配置

注意動態工廠內部是成員方法,調用成員方法之前,需要先實例化工廠,所以,需要配置工廠的bean。然后通過調用此工廠的方法,實例化得到對應的bean。

<span style="background-color:#f8f8f8"><span style="color:#333333"> ? ?<span style="color:#aa5500"><!--配置動態工廠 --></span><span style="color:#117700"><</span><span style="color:#117700">bean</span> <span style="color:#0000cc">id</span>=<span style="color:#aa1111">"dynamicGirlFriendFactory"</span> <span style="color:#0000cc">class</span>=<span style="color:#aa1111">"com.dyh.factory.DynamicGirlFriendFactory"</span><span style="color:#117700">></</span><span style="color:#117700">bean</span><span style="color:#117700">></span><span style="color:#aa5500"><!--通過此動態工廠得到GirlFrend對象--></span><span style="color:#117700"><</span><span style="color:#117700">bean</span> <span style="color:#0000cc">id</span>=<span style="color:#aa1111">"gf_dynFactory_cws"</span> <span style="color:#0000cc">factory-bean</span>=<span style="color:#aa1111">"dynamicGirlFriendFactory"</span> <span style="color:#0000cc">factory-method</span>=<span style="color:#aa1111">"getGirlFriendCWS"</span><span style="color:#117700">></span><span style="color:#117700"></</span><span style="color:#117700">bean</span><span style="color:#117700">></span><span style="color:#117700"><</span><span style="color:#117700">bean</span> <span style="color:#0000cc">id</span>=<span style="color:#aa1111">"gf_dynFactory_fjc"</span> <span style="color:#0000cc">factory-bean</span>=<span style="color:#aa1111">"dynamicGirlFriendFactory"</span> <span style="color:#0000cc">factory-method</span>=<span style="color:#aa1111">"getGirlFriendFJC"</span><span style="color:#117700">></span><span style="color:#117700"></</span><span style="color:#117700">bean</span><span style="color:#117700">></span></span></span>

3.3 測試TestGirlfriendDynamicFactory

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">TestGirlfriendDynamicFactory</span> {<span style="color:#770088">public</span> <span style="color:#770088">static</span> <span style="color:#008855">void</span> <span style="color:#000000">main</span>(<span style="color:#008855">String</span>[] <span style="color:#000000">args</span>) {<span style="color:#000000">ApplicationContext</span> <span style="color:#000000">ac</span> <span style="color:#981a1a">=</span><span style="color:#770088">new</span> <span style="color:#000000">ClassPathXmlApplicationContext</span>(<span style="color:#aa1111">"application_context.xml"</span>);<span style="color:#aa5500">// 從Spring IoC容器中獲取對象</span><span style="color:#000000">Girlfriend</span> <span style="color:#000000">girlFriend</span> <span style="color:#981a1a">=</span> (<span style="color:#000000">Girlfriend</span>) <span style="color:#000000">ac</span>.<span style="color:#000000">getBean</span>(<span style="color:#aa1111">"gf_dynFactory_fjc"</span>);<span style="color:#000000">girlFriend</span>.<span style="color:#000000">say</span>();<span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#000000">girlFriend</span>);} }</span></span>

六、在 Spring IOC 容器中獲取 Bean 對象的方式

1、通過 id 或 name 獲取 Bean 對象

Girlfriend girlFriend = (Girlfriend) ac.getBean("gf_dynFactory_fjc");

2、通過類型獲取 Bean 對象

Girlfriend girlFriend = (Girlfriend) ac.getBean(Class clazz);

獲取 Bean 對象

<span style="background-color:#f8f8f8"><span style="color:#333333">public class GirlfriendOYY implements Girlfriend {@Overridepublic void say() {System.out.println("OMG");} }</span></span>

配置bean

<span style="background-color:#f8f8f8"><span style="color:#333333"><bean id="gfOYY" class="com.dyh.pojo.impl.GirlfriendOYY"></bean></span></span>

測試

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">TestGirlfriendGetByClass</span> {<span style="color:#770088">public</span> <span style="color:#770088">static</span> <span style="color:#008855">void</span> <span style="color:#000000">main</span>(<span style="color:#008855">String</span>[] <span style="color:#000000">args</span>) {<span style="color:#000000">ApplicationContext</span> <span style="color:#000000">ac</span> <span style="color:#981a1a">=</span> <span style="color:#770088">new</span> <span style="color:#000000">ClassPathXmlApplicationContext</span>(<span style="color:#aa1111">"application_context.xml"</span>);<span style="color:#aa5500">//GirlfriendFJC bean = ac.getBean(GirlfriendFJC.class);</span><span style="color:#000000">GirlfriendOYY</span> <span style="color:#000000">bean</span> <span style="color:#981a1a">=</span> <span style="color:#000000">ac</span>.<span style="color:#000000">getBean</span>(<span style="color:#000000">GirlfriendOYY</span>.<span style="color:#770088">class</span>);<span style="color:#000000">bean</span>.<span style="color:#000000">say</span>();} }</span></span>

運行結果

?

特別注意:通過類型去獲取Bean,如果配置文件中配置了多個此類型的bean,容器不知道你要獲取哪個,所以,還需要指定bean的id或name屬性值。如下操作:

?

原因:

?

總結

1、理解Spring框架的作用,理解IOC(面試題)。

2、代碼實現:

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#000000">ApplicationContext</span> <span style="color:#000000">ac</span> <span style="color:#981a1a">=</span> <span style="color:#770088">new</span> <span style="color:#000000">ClassPathXmlApplicationContext</span>(<span style="color:#aa1111">"application_context.xml"</span>);</span></span>

總結

以上是生活随笔為你收集整理的Spring简介与IOC容器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。