1.配置bean的方式

配置bean有三种方式:通过全类名(class反射)、通过工厂方法(静态工厂&实例工厂)、通过FactoryBean。前面我们已经一起学习过全类名方式和工厂方法方式,下面通过这篇文章来学习一下FactroyBean.

2.FactoryBean配置bean

FactoryBean是Spring给我们提供的一个接口,我们来看一下这个接口的源码:

 public interface FactoryBean<T> {
@Nullable
T getObject() throws Exception; @Nullable
Class<?> getObjectType(); default boolean isSingleton() {
return true;
}
}

这个接口中为我们提供了三个方法:

getObject():返回bean本身
getObjectType():返回FactoryBean创建Bean的类型。 
isSingleton():返回bean是否是单例的
我们有全类名配置,也有工厂方法配置,为什么我们还要用这种FactoryBean来配置Bean呢?因为我们在配置一个bean的时候需要用到另一个bean的时候,使用FactoryBean在合适不过了
下面来具体操作一下: 首先我们创建一个Car的FactoryBean去实现FactoryBean接口:
 public class CarFactoryBean implements FactoryBean {
private String brand; public void setBrand(String brand) {
this.brand = brand;
} @Nullable
public Object getObject() throws Exception {
return new Car("BMW", 5000000);
} @Nullable
public Class<?> getObjectType() {
return Car.class;
} public boolean isSingleton() {
return true;
}
}

Spring配置文件:

 <!--通过factorybean来配置bean的实例,通过class来指向factorybean的全类名,property指的factory的属性-->
<!--,但实际返回的的是,getObject方法返回的实例。-->
<!--我们在配置bean的时候经常需要用的ioc容器里的其他bean,在factorybean中处理你传入的其他bean以达到目的-->
<bean id="car1" class="com.wzy.factorybean.CarFactoryBean">
<property name="brand" value="audi"/>
</bean>

编写Main测试类:

 public class Main {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean-factorybean.xml"); Car car1 = (Car) ctx.getBean("car1"); System.out.println(car1);
}
}

输出结果:

3.FactoryBean总结

通过Factorybean来配置bean的实例,通过class来指向factorybean的全类名,property指的factory的属性,我们在配置bean的时候经常需要用的ioc容器里的其他bean,在factorybean中处理你传入的其他bean以达到目的。但实际返回的的是,getObject方法返回的实例

Spring基础16——使用FactoryBean来创建的更多相关文章

  1. Flask基础(16)-->WTForms表单创建和简单验证

    Flask基础(16)-->WTForms表单创建和简单验证 前言:使用Flask_WTF需要配置参数SECRET_KEYCSRF_ENABLED是为了CSRF(跨站请求伪造)保护.SECRET ...

  2. Spring基础(2):bean顺序创建

    public class Person{ public Person(){ System.out.println("Person person person ..."); } } ...

  3. spring基础:什么是框架,框架优势,spring优势,耦合内聚,什么是Ioc,IOC配置,set注入,第三方资源配置,综合案例spring整合mybatis实现

    知识点梳理 课堂讲义 1)Spring简介 1.1)什么是框架 源自于建筑学,隶属土木工程,后发展到软件工程领域 软件工程中框架的特点: 经过验证 具有一定功能 半成品 1.2)框架的优势 提高开发效 ...

  4. Spring Boot 16 条最佳实践

    Spring Boot是最流行的用于开发微服务的Java框架.在本文中,我将与你分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践.这些内容是基于我的个人经验和一些熟知的Sp ...

  5. 喝完可乐桶后程序员回归本源,开源Spring基础内容

    周六了,又是摸鱼的一天,今天还有点不在状态,脑瓜子迷迷糊糊的,昨晚出去喝可乐桶喝的脑子到现在都不是很正常(奉劝各位可以自己小酌:450ml威士忌+1L多一点可乐刚刚好,可能是我酒量不好),正好没啥事就 ...

  6. Spring基础知识

    Spring基础知识 利用spring完成松耦合 接口 public interface IOutputGenerator { public void generateOutput(); } 实现类 ...

  7. [.net 面向对象编程基础] (16) 接口

    [.net 面向对象编程基础] (16) 接口 关于“接口”一词,跟我们平常看到的电脑的硬件“接口”意义上是差不多的.拿一台电脑来说,我们从外面,可以看到他的USB接口,COM接口等,那么这些接口的目 ...

  8. Spring三 Bean的三种创建方式

    创建Bean的三种方式在大多数情况下,Spring容器直接通过new关键字调用构造器来创建Bean实例,而class属性指定Bean实例的实现类,但这不是实例化Bean的唯一方法.实际上,Spring ...

  9. Spring 基础知识

    Spring架构简单描述 原文:https://www.shiyanlou.com/courses/document/212 Spring 概述 1. Spring 是什么 Spring是一个开源的轻 ...

随机推荐

  1. 1.WIN10下搭建vue开发环境

    WIN10下搭建vue开发环境 详细的安装步骤如下: 一.安装node.js 说明:安装node.js的windows版本后,会自动安装好node以及包管理工具npm,我们后续的安装将依赖npm工具. ...

  2. pwd命令学习

    pwd命令学习 1.学习pwd命令 pwd命令功能为输出当前所在工作目录的绝对路径名称. 绝对路径和相对路径: 绝对路径:从根目录开始直到文件位置 相对路径:相对于程序当前所在目录到文件位置 例:程序 ...

  3. 记一次全局分区索引update调优

    原始SQL: CREATE OR REPLACE PROCEDURE sp_upd_suppressed_emails(  A_LIMIT_BULK IN PLS_INTEGER DEFAULT 20 ...

  4. 条形码(barcode)code128生成代码

    条形码(barcode)code128生成代码 很简单 多些这位兄弟https://bbs.csdn.net/topics/350125614 下面是我的DEMO 直接放到VS2005下面编译即可 # ...

  5. Linux_LVM、RAID_RHEL7

    目录 目录 LVM逻辑卷管理 把物理分区初始化为物理卷 创建卷组 建立逻辑卷 格式化 挂载 vg拓展操作 lv扩展操作 RAID RAID 类型 RAID0条带化 RAID1镜像 RAID5条带冗余 ...

  6. windows的VMWare下NAT共享无线方式上网的配置

    1,本文参看: https://blog.51cto.com/13648313/2095288 VMware安装最新版CentOS7图文教程 https://blog.csdn.net/q215879 ...

  7. UnityEventSystem

    能够处理各种UI事件: IPointerEnterHandler:当指针进入 void OnPointerEnter(PointerEventData eventData); IPointerExit ...

  8. Native SQL的使用

    OPEN SQL也不是万能的,存在一定的局限性.例如后台数据库为Oracle,对数据表中某个字段大小写是不固定的,若以这个字段为查旬条件,一般Oracle处理方法是使用Upper /Lower函数据将 ...

  9. 2018.03.30 abap屏幕标签保存之前执行过的状态

    REPORT ZZJX_TEST09. *&---------------------------------------------------------------------* TAB ...

  10. zabbix+grafana使用

    参照文档 https://blog.csdn.net/xiegh2014/article/details/54928883