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

歡迎訪問 生活随笔!

生活随笔

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

javascript

Spring系列(七):@FactoryBean注解用法介绍

發布時間:2023/12/10 javascript 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring系列(七):@FactoryBean注解用法介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天給大家介紹@FactoryBean注解用法,希望對大家能有所幫助!

? ? ? ? ? ? ? ?

1、@FactoryBean注解介紹

FactoryBean是實現了FactoryBean<T>接口的Bean,可以該Bean的ID從BeanFactory中獲取的實際上是FactoryBean中getObject()方法返回的實例對象,而并不是直接FactoryBean本身,想要獲取FactoryBean對象本身,可以在id前面加一個&符號來獲取。

BeanFactory部分代碼:

說明:String FACTORY_BEAN_PREFIX = "&" ,&符號表示要獲取FactoryBean本身

package org.springframework.beans.factory;import org.springframework.beans.BeansException; import org.springframework.core.ResolvableType; import org.springframework.lang.Nullable;public interface BeanFactory {String FACTORY_BEAN_PREFIX = "&";}

2、@FactoryBean的源碼內容如下:

Spring3.0版本之后,FactoryBean開始支持泛型,即接口聲明改為FactoryBean<T>的形式

package org.springframework.beans.factory;import org.springframework.lang.Nullable;public interface FactoryBean<T> {String OBJECT_TYPE_ATTRIBUTE = "factoryBeanObjectType";@NullableT getObject() throws Exception;@NullableClass<?> getObjectType();default boolean isSingleton() {return true;} }

實現FactoryBean<T>接口有一下三個方法

  • getObject:獲取bean對應的實例對象

  • getObjectType:獲取factoryBean獲取到的實例類型

  • isSingleton:factoryBean創建的實例是否是單實例

3、用法示例

3.1 新建Book.java

package com.spring.bean;public class Book {private String bookName;private String bookType;private double price;public Book(String bookName, String bookType, double price) {this.bookName = bookName;this.bookType = bookType;this.price = price;}public String getBookName() {return bookName;}public void setBookName(String bookName) {this.bookName = bookName;}public String getBookType() {return bookType;}public void setBookType(String bookType) {this.bookType = bookType;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}@Overridepublic String toString() {return "Book{" +"bookName='" + bookName + '\'' +", bookType='" + bookType + '\'' +", price=" + price +'}';} }

3.2 新建BookFactoryBean.java

package com.spring.bean;import org.springframework.beans.factory.FactoryBean;public class BookFactoryBean implements FactoryBean<Book> {public BookFactoryBean factoryBeanVO() {return new BookFactoryBean();}public Book getObject() throws Exception {return new Book("紅樓夢", "中國名著", 88);}public Class<?> getObjectType() {return Book.class;}public boolean isSingleton() {return true;} }

3.3 FactoryBeanConfig.java

package com.spring.config;import com.spring.bean.BookFactoryBean;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;@Configuration public class FactoryBeanConfig {@Beanpublic BookFactoryBean bookFactoryBean(){return new BookFactoryBean();} }

3.4 TestFactoryBean.java

package com.spring.test;import com.spring.config.FactoryBeanConfig; import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class TestFactoryBean {public static void main(String[] args) {AnnotationConfigApplicationContext annotationContext = new AnnotationConfigApplicationContext(FactoryBeanConfig.class);// 獲取工廠類的beanObject bookFactoryBean = annotationContext.getBean("bookFactoryBean");System.out.println(bookFactoryBean.getClass());// 輸出結果:class com.spring.bean.Book//獲取FactoryBean 本身 加 &符號Object bookFactoryBean1 = annotationContext.getBean("&bookFactoryBean");System.out.println(bookFactoryBean1.getClass());// 輸出結果:class com.spring.bean.BookFactoryBean} }

4、@FactoryBean應用場景

  • 單一的對象使用FactoryBean意義不大。

  • 創建對象時需要依賴于需要別的接口來監聽數據、根據推送數據過來的接口做一些數據處理。

  • 搭配其他接口協作, 依賴于Spring生命周期, 針對某個時間節點、合適的條件判斷,來生成自己需要的對象。

5、典型應用

  • MyBatis3 提供 mybatis-spring項目中的 org.mybatis.spring.SqlSessionFactoryBean:

  • 阿里開源的分布式服務框架 Dubbo 中的Consumer 也使用到了FactoryBean

  • shiro中ShiroFilterFactoryBean

  • druid的JdbcStatManagerFactoryBean

IT技術分享社區

個人博客網站:https://programmerblog.xyz

文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識

總結

以上是生活随笔為你收集整理的Spring系列(七):@FactoryBean注解用法介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

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