Spring學習第十二天:FactoryBean配置bean
Spring 中有兩種型別的 Bean, 一種是普通Bean, 另一種是工廠Bean, 即FactoryBean.
工廠 Bean 跟普通Bean不同, 其返回的物件不是指定類的一個例項, 其返回的是該工廠 Bean 的 getObject 方法所返回的物件
為什麼我們有了全類名配置,工廠方法配置,為什麼還要有factorybean?
因為我們有些時候配置bean的時候,需要用到IOC容器中其他的bean,這個時候我們通過FactoryBean去配置是最合適的。
新建一個包: com.atguigu.spring.beans.factorybean
新建類Car
package com.atguigu.spring.beans.factorybean;
public class Car {
private String brand;
private double price;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Car [brand=" + brand + ", price=" + price + "]";
}
public Car() {
// TODO Auto-generated constructor stub
System.out.println("Car's constructor...");
}
public Car(String brand, double price) {
super();
this.brand = brand;
this.price = price;
}
}
新建類 CarFactoryBean, 注意這個類需要實現FactoryBean介面
package com.atguigu.spring.beans.factorybean;
import org.springframework.beans.factory.FactoryBean;
// 自定義的FactoryBean需要實現 FactoryBean 介面
public class CarFactoryBean implements FactoryBean{
private String brand;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
// 返回bean的物件
@Override
public Object getObject() throws Exception {
// TODO Auto-generated method stub
return new Car(brand, 500000);
}
// 返回bean的型別
@Override
public Class getObjectType() {
// TODO Auto-generated method stub
return Car.class;
}
// 是不是單例
@Override
public boolean isSingleton() {
// TODO Auto-generated method stub
return true;
}
}
FactoryBean的三個方法及作用
getObject() :返回bean的物件
getObjectType():返回bean的型別
isSingleton():是否是單例
新建beans-factorybean.xml檔案
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
通過FactoryBean 來配置Bean 的例項
calss: 指向FactoryBean的全類名
property: 配置FactoryBean的屬性
但實際返回的例項卻是FactoryBean的 getObject() 方法返回的例項
-->
<bean id="car" class="com.atguigu.spring.beans.factorybean.CarFactoryBean">
<property name="brand" value="BMW"></property>
</bean>
</beans>
新建Main類:
package com.atguigu.spring.beans.factory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-factory.xml");
Car car2 = (Car) ctx.getBean("car2");
System.out.println(car2);
}
}
輸出結果如下:
Car [brand=BMW, price=500000.0]
綜上: 在進行FactoryBean配置的時候,首先需要實現FactoryBean介面,其次,calss: 指向FactoryBean的全類名,property: 配置FactoryBean的屬性,但真正返回的例項卻是FactoryBean的 getObject() 方法中返回的例項。本例子中返回的是Car例項,而非FactoryBean例項。
相關推薦
Spring學習第十二天:FactoryBean配置bean
Spring 中有兩種型別的 Bean, 一種是普通Bean, 另一種是工廠Bean, 即FactoryBean. 工廠 Bean 跟普通Bean不同, 其返回的物件不是指定類的一個例項, 其返回的是該工廠 Bean 的 getObject 方法所返回的物件
python學習第十二天:閉包函數與裝飾器
源代碼 -s 為什麽 pre def func stop 修改 rom 閉包函數: 什麽是閉包函數: 閉指的是定義在一個函數內部 包指的是該函數包含對外部作用域(非全局作用域)名字的引用 def counter(): n=0 d
第十二天:浪跡天涯網上商城(1.0版本)--spring cloud zuul閘道器搭建
1、需求我們都知道專案中的服務是越來越多的,如果沒有一個統一的閘道器來做分發,那麼就會將複雜度帶到客戶端,所以我們必須搭建閘道器。2、實現步驟1、建立一個專案langjitianya-gateway2、準備好pom.xml檔案3、準備好配置檔案4、準備好啟動類5、run 起來
linux系統學習第十二天-<<工程師技術>>
linux工程師技術 linux管理員技術 linux雲計算工程師 深圳雲計算王森 雲計算運維工程師 虛擬化概述 ? Virtualization 資源管理 – x個物理資源 --> y個邏輯資源 – 實現程度:完全、部分、硬件輔助(CPU) 手動新建一臺虛擬機:
學習筆記-小甲魚Python3學習第十二講:一個打了激素的數組3
!= 查找 lse pre 表達 如果 eof ssh 連接 列表的一些常用操作符:比較操作符、邏輯操作符、連接操作符、重復操作符、成員關系操作符比較操作符:>>> list1 = [123,456]>>> list2 = [234,12
python自動化運維學習第十二天--面向物件和類
面向物件和類 面向過程和麵向物件程式設計 面向過程程式設計:函數語言程式設計,C語言等 面向物件程式設計:C++,Java,Python等 類和物件 類和物件是面向物件中的兩個重要概念 類:是對事物的抽象,比如:人類、球類等 物件:是類的
Java進階學習第十二天(監聽器、國際化)
一、監聽器 1、監聽器(listener):主要是用來監聽特定物件的建立或銷燬、屬性的變化的!是一個實現特定介面的普通java類! 2、物件: 自己建立自己用(不用監聽) 別人建立自己用(需要監聽) 3、Servlet中哪些物件需要監聽? request / se
【譯】你不知道的 Chrome 除錯工具技巧 第十二天:忍者日誌列印!(the ninja logs)
特別宣告 本文是作者 Tomek Sułkowski 釋出在 medium 上的一個系列。據作者透露一共有 24 篇,一直更新到 12 月 24 日 版權歸原作者所有。 作者在Twitter上推薦我們的中文翻譯啦,截圖在最後 譯者在翻譯前已經和作者溝通得到了翻譯整個系列的授權。 為了不影響大家閱讀,授權
OpenCV學習第十二篇:帶透明通道影象合成(縮放,旋轉,和ROI)
第一步:獲取素材圖片 Mat src, dst; src = imread("F:/識圖/底圖.PNG", 1); dst = imread("logo", -1); 【ps:這裡需要注意的是透明度圖片獲取,後面的引數帶-1】 第二
Java學習第十二天
package lesson12; import java.util.*; import java.io.*; class Test { public static void main(String[] args) throws Exception { //S
自學python 第十二天:數字 三角函式+數學常量
#python 三角函式 ''' 函式 描述 acos(x) 返回x的反餘弦弧度值。 asin(x) 返回x的反正弦弧度值。 atan(x) 返回x的反正切弧度值。 atan2(y,
python爬蟲學習第十二天
今天學習了用Beautifulsoup函式來獲取指定的節點,以及用當前結點順藤摸瓜找到其子節點,後代節點,兄弟節點,父節點。 練習1 findAll 函式抽取只包含在 標籤裡的文字 還順便把class=’red’標籤裡的內容也提取了 # from url
java學習第十二天之多執行緒死鎖和併發
package MoreThreadLearn; /* 兩個儲戶到銀行存錢,每個人存了三次,一次100元 1、描述銀行 2、描述儲戶業務 分析多執行緒是否存在安全隱患? 1、執行緒任務中是否有共享的資料 2、是否多條操作共享資料的程式碼 */ public
node.js 學習第十二天 utils
一、Utils 是node.js的常用工具類 var util=require('util'); //原型類 function Base () {this.name='basename';this.b
黑馬程式設計師----基礎學習第十二天
------- android培訓、java培訓、期待與您交流! ----------
學習python的第十二天
本節主要內容: 1. ⽣生成器和⽣生成器函式2. 列列表推導式 ⼀、生成器 1. 通過⽣生成器函式 2. 通過各種推導式來實現⽣生成器 3. 通過資料的轉換也可以獲取⽣生成器 send和__next__()區別: 1. send和next()都是讓⽣生成器向下走⼀一次 2. send可以
java學習之路————第十二天
今天我們接觸到final關鍵字,抽象類和抽象方法,遞迴演算法以及介面 一、final關鍵字 1.final修飾類,該類不能被繼承 如:String 2.final修飾方法,該方法不能被重寫 3.final修飾變數,該變數為常量。往往和stat
第十二講:12,spring宣告式事務管理-註解式
1,複製專案spring404 ,改名spring404-3。修改BankServiceImpl類,添加註解,package com.cruise.service.impl;import org.springframework.transaction.annotation.Tra
Spring Boot 基礎系列教程 | 第十二篇:使用Spring-data-jpa簡化資料訪問層(推薦)
推薦 Spring Boot/Cloud 視訊: Spring Boot中使用Spring-data-jpa讓資料訪問更簡單、更優雅 在上一篇Spring中使用JdbcTemplate訪問資料庫 中介紹了一種基本的資料訪問方式,結合構建RESTful API和
Oracle學習筆記第十二天-02
Oracle學習筆記第十二天-02 遊標 隱式遊標 概念:Oracle自動在後臺使用的遊標,使用者不參與任何操作,所以對使用者是“透明”(隱藏)的。 特徵: 不能手動開啟、提取、關閉 使用SELECT…INTO…語句時,Oracle會自動建立、開啟、取值(F