1.配置bean的方式

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

2.FactoryBean配置bean

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

 1 public interface FactoryBean<T> {
 2     @Nullable
 3     T getObject() throws Exception;
 4
 5     @Nullable
 6     Class<?> getObjectType();
 7
 8     default boolean isSingleton() {
 9         return true;
10     }
11 }

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

getObject():返回bean本身
getObjectType():返回FactoryBean创建Bean的类型。 
isSingleton():返回bean是否是单例的
我们有全类名配置,也有工厂方法配置,为什么我们还要用这种FactoryBean来配置Bean呢?因为我们在配置一个bean的时候需要用到另一个bean的时候,使用FactoryBean在合适不过了下面来具体操作一下:

首先我们创建一个Car的FactoryBean去实现FactoryBean接口:
 1 public class CarFactoryBean implements FactoryBean {
 2     private String brand;
 3
 4     public void setBrand(String brand) {
 5         this.brand = brand;
 6     }
 7
 8     @Nullable
 9     public Object getObject() throws Exception {
10         return new Car("BMW", 5000000);
11     }
12
13     @Nullable
14     public Class<?> getObjectType() {
15         return Car.class;
16     }
17
18     public boolean isSingleton() {
19         return true;
20     }
21 }

Spring配置文件:

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

编写Main测试类:

1 public class Main {
2     public static void main(String[] args) {
3         ApplicationContext ctx = new ClassPathXmlApplicationContext("bean-factorybean.xml");
4
5         Car car1 = (Car) ctx.getBean("car1");
6
7         System.out.println(car1);
8     }
9 }

输出结果:

3.FactoryBean总结

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

转载于:https://www.cnblogs.com/fengyun2019/p/10843275.html

Spring基础16——使用FactoryBean来创建相关推荐

  1. (十一)Spring 基础注解(对象创建相关注解、注入相关注解)

    注解编程 目录 注解基础概念 注解的作用 Spring 注解的发展历程 Spring 基础注解(Spring 2.x) 对象创建相关注解 @Component @Repository.@Service ...

  2. 【Spring 基础注解】对象创建相关注解、注入相关注解、注解扫描详解

    Spring 基础注解(2.x) 注解基础概念 注解的作用 Spring 注解的发展历程 对象创建相关注解 @Component @Repository.@Service.@Contoller @Sc ...

  3. Spring基础篇:高级注解编程

    文章内容来自于B站孙哥说Spring 第一章:@Configuration 一:配置Bean替换XML细节 二:应用配置Bean工厂对象 三:配置Bean细节分析 1:整合Logback 三:@Com ...

  4. Spring AOP源码(2)—AspectJAwareAdvisorAutoProxyCreator创建代理对象【两万字】

      基于最新Spring 5.x,介绍了Spring AOP中的AspectJAwareAdvisorAutoProxyCreator自动代理创建者的工作流程,对于创建代理对象的源码进行了深度分析! ...

  5. Spring基础专题——第十一章(高级注解编程完结)

    前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...

  6. Spring基础专题——第九章(基础注解编程——上)

    目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从一个互联网职场小白到一个沪漂湿人,一路让我知道分享是一件多么重要的事情 ...

  7. Spring基础专题——第三章(反转控制与依赖注入)

    前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...

  8. Spring MVC 原理探秘 - 容器的创建过程

    1.简介 在上一篇文章中,我向大家介绍了 Spring MVC 是如何处理 HTTP 请求的.Spring MVC 可对外提供服务时,说明其已经处于了就绪状态.再次之前,Spring MVC 需要进行 ...

  9. Spring IOC 容器源码分析 - 创建单例 bean 的过程

    1. 简介 在上一篇文章中,我比较详细的分析了获取 bean 的方法,也就是getBean(String)的实现逻辑.对于已实例化好的单例 bean,getBean(String) 方法并不会再一次去 ...

最新文章

  1. 思科——单臂路由与DHCP的结合
  2. scanf与gets的区分
  3. WPF 实现展示反应盘、者试剂仓控件
  4. clob mybatis_spring + mybatis 存取clob
  5. 计算机维修工具和仪器,浮球液位计介绍微型计算机常用维修工具和仪器
  6. ubuntu安装redis_在Ubuntu上安装Redis
  7. F1-Score相关概念
  8. 使用rem单位布局的时候有什么好处_好程序员web前端技术分享移动端页面布局
  9. 计算机软件考试高级工程师,软考高级工程师容易考吗
  10. 获取随机数的n种方法,你知道几种
  11. 一个奇鸽船新版本 v1.32
  12. nividia-smi命令不显示占用显卡的进程
  13. 硬盘分区总结(小东子)
  14. python常用的正则符号汇总
  15. mysql连接字符串_[MySQL] - MySQL连接字符串总结
  16. charlesfiddler安卓手机安装系统级ca证书抓取https请求信息
  17. java废弃方法_JAVA9之后废弃newInstance()方法
  18. 【JVM 学习笔记 05】:JVM性能调优工具的使用和优化案例
  19. 2022 最新版前端工程师面试题手册
  20. FFmpeg进阶:生成视频的缩略图

热门文章

  1. C语言字符char和整型int的关系
  2. 使用Boost的Serialization库序列化STL标准容器
  3. Linux简单的颜色设置
  4. java bufferedimage颜色_使用BufferedImage进行渐变色操作
  5. java aes php_php和java的aes默认加密算法有点区别及解决方法。
  6. html中使用地图和area,根据参数对area的颜色进行改变,AE考试题
  7. mingle_大众汽车品牌SUV之夜,数千平米的mingle区和超长弧面屏了解一下?
  8. Java项目:医院预约挂号系统(java+SpringBoot+Maven+Vue+mysql)
  9. suse linux登录黑屏,SUSE Linux登录时黑屏解决办法
  10. python答辩结束语_Beta答辩总结