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