1. 程式人生 > >Spring學習第十二天:FactoryBean配置bean

Spring學習第十二天:FactoryBean配置bean

Spring 中有兩種型別的 Bean, 一種是普通Bean, 另一種是工廠Bean, 即FactoryBean.
工廠 Bean 跟普通Bean不同, 其返回的物件不是指定類的一個例項, 其返回的是該工廠 Bean 的 getObject 方法所返回的物件

FactoryBean

為什麼我們有了全類名配置,工廠方法配置,為什麼還要有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