javascript
Spring 学习笔记 3. 尚硅谷_佟刚_Spring_配置 Bean
1,bean 的配置
<bean id="helloWorld" class="com.yfy.HelloWorld"><property name="name" value="spring"></property> </bean>class: bean 的 指的是HelloWorld的全路徑名稱(chēng),并且由于是通過(guò)反射方式創(chuàng)建Bean,因此Bean中必須有無(wú)參的構(gòu)造器
public HelloWorld(){}如果沒(méi)有無(wú)參構(gòu)造器則會(huì)出錯(cuò),當(dāng)然如果沒(méi)有顯示聲明構(gòu)造器也無(wú)妨,因?yàn)樘摂M機(jī)會(huì)隱式創(chuàng)建一個(gè)無(wú)參的構(gòu)造器。
id:當(dāng)創(chuàng)建好一個(gè)bean之后,如何引用這個(gè)bean呢?就需要使用id.它標(biāo)識(shí)bean.并且id唯一。
?id:Bean 的名稱(chēng)。
–在 IOC 容器中必須是唯一的
–若 id 沒(méi)有指定,Spring 自動(dòng)將權(quán)限定性類(lèi)名作為 Bean 的名字
–id 可以指定多個(gè)名字,名字之間可用逗號(hào)、分號(hào)、或空格分隔
2,Spring 容器
?IOC(Inversion of Control):其思想是反轉(zhuǎn)資源獲取的方向. 傳統(tǒng)的資源查找方式要求組件向容器發(fā)起請(qǐng)求查找資源. 作為回應(yīng), 容器適時(shí)的返回資源. 而應(yīng)用了 IOC 之后, 則是容器主動(dòng)地將資源推送給它所管理的組件, 組件所要做的僅是選擇一種合適的方式來(lái)接受資源. 這種行為也被稱(chēng)為查找的被動(dòng)形式
?DI(Dependency Injection) — IOC 的另一種表述方式:即組件以一些預(yù)先定義好的方式(例如: setter 方法)接受來(lái)自如容器的資源注入. 相對(duì)于 IOC 而言,這種表述更直接
?在 Spring IOC 容器讀取 Bean 配置創(chuàng)建 Bean 實(shí)例之前, 必須對(duì)它進(jìn)行實(shí)例化. 只有在容器實(shí)例化后, 才可以從 IOC 容器里獲取 Bean 實(shí)例并使用.
?Spring 提供了兩種類(lèi)型的 IOC 容器實(shí)現(xiàn).
–BeanFactory: IOC 容器的基本實(shí)現(xiàn).
–ApplicationContext: 提供了更多的高級(jí)特性. 是 BeanFactory 的子接口.
–BeanFactory 是 Spring 框架的基礎(chǔ)設(shè)施,面向 Spring 本身;ApplicationContext 面向使用 Spring 框架的開(kāi)發(fā)者,幾乎所有的應(yīng)用場(chǎng)合都直接使用 ApplicationContext 而非底層的 BeanFactory
–無(wú)論使用何種方式, 配置文件時(shí)相同的.
| ?ApplicationContext 的主要實(shí)現(xiàn)類(lèi): –ClassPathXmlApplicationContext:從 類(lèi)路徑下加載配置文件 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");–FileSystemXmlApplicationContext: 從文件系統(tǒng)中加載配置文件 ?ConfigurableApplicationContext 擴(kuò)展于 ApplicationContext,新增加兩個(gè)主要方法:refresh() 和 close(),讓 ApplicationContext 具有啟動(dòng)、刷新和關(guān)閉上下文的能力 ?ApplicationContext 在初始化上下文時(shí)就實(shí)例化所有單例的 Bean。 ?WebApplicationContext 是專(zhuān)門(mén)為 WEB 應(yīng)用而準(zhǔn)備的,它允許從相對(duì)于 WEB 根目錄的路徑中完成初始化工作 |
創(chuàng)建好容器之后需要從IOC容器獲取bean,下面有些重載的方法,一般使用下面的方法,就是取得bean中的id名稱(chēng),記得要強(qiáng)轉(zhuǎn)。
HelloWorld helloWorld =(HelloWorld) applicationContext.getBean("helloWorld");3,屬性注入方式
?Spring 支持 3 種依賴(lài)注入的方式
–屬性注入
–構(gòu)造器注入
–工廠方法注入(很少使用,不推薦)
| ?屬性注入即通過(guò) setter 方法注入Bean 的屬性值或依賴(lài)的對(duì)象 ?屬性注入使用 <property> 元素, 使用 name 屬性指定 Bean 的屬性名稱(chēng),value 屬性或 <value> 子節(jié)點(diǎn)指定屬性值 ?屬性注入是實(shí)際應(yīng)用中最常用的注入方式 |
?
4,構(gòu)造方法注入
??? ????? ?通過(guò)構(gòu)造方法注入Bean 的屬性值或依賴(lài)的對(duì)象,它保證了 Bean 實(shí)例在實(shí)例化后就可以使用。
????????? ?構(gòu)造器注入在 <constructor-arg> 元素里聲明屬性, <constructor-arg> 中沒(méi)有 name 屬
???????? 演示一下:添加Car類(lèi)
?????????
??????? 代碼
package com.yfy; public class Car {private String brand;private String crop;private int price;private int maxSpeed;public Car(String brand, String crop, int price) {super();this.brand = brand;this.crop = crop;this.price = price;}@Overridepublic String toString() {return "Car [brand=" + brand + ", crop=" + crop + ", price=" + price + ", maxSpeed=" + maxSpeed + "]";} }配置bean:
主方法調(diào)用:
結(jié)果:
要注意的是:
上面的構(gòu)造器只是為了其中的前三個(gè)屬性進(jìn)行初始化,bean中的配置其實(shí)是按照順序來(lái)初始化的,當(dāng)然如果構(gòu)造器非常多,如何對(duì)bean進(jìn)行配置呢?、
例如如下的代碼:
其中有兩個(gè)構(gòu)造器,如果在按照上面的方法肯定行不通的,因此有下面的解決方案
(1)可以創(chuàng)建index:<constructor-arg value="audi" index="0"></constructor-arg>
(2)構(gòu)造函數(shù)也是重載的,區(qū)分重載的是參數(shù)個(gè)數(shù)和類(lèi)型,個(gè)數(shù)不同好辦,相同的時(shí)候就可以在后面注明類(lèi)型
?????? <constructor-arg value="shanghai" type="java.lang.String"></constructor-arg>
(3)通過(guò)上面的圖片可以看出索引和類(lèi)型可以混合使用。
這樣的話就沒(méi)什么問(wèn)題
轉(zhuǎn)載于:https://www.cnblogs.com/yefengyu/p/5094765.html
總結(jié)
以上是生活随笔為你收集整理的Spring 学习笔记 3. 尚硅谷_佟刚_Spring_配置 Bean的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一个简单视频网站开发小记
- 下一篇: lintcode 中等题:subSets