Spring基础16——使用FactoryBean来创建
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来创建相关推荐
- (十一)Spring 基础注解(对象创建相关注解、注入相关注解)
注解编程 目录 注解基础概念 注解的作用 Spring 注解的发展历程 Spring 基础注解(Spring 2.x) 对象创建相关注解 @Component @Repository.@Service ...
- 【Spring 基础注解】对象创建相关注解、注入相关注解、注解扫描详解
Spring 基础注解(2.x) 注解基础概念 注解的作用 Spring 注解的发展历程 对象创建相关注解 @Component @Repository.@Service.@Contoller @Sc ...
- Spring基础篇:高级注解编程
文章内容来自于B站孙哥说Spring 第一章:@Configuration 一:配置Bean替换XML细节 二:应用配置Bean工厂对象 三:配置Bean细节分析 1:整合Logback 三:@Com ...
- Spring AOP源码(2)—AspectJAwareAdvisorAutoProxyCreator创建代理对象【两万字】
基于最新Spring 5.x,介绍了Spring AOP中的AspectJAwareAdvisorAutoProxyCreator自动代理创建者的工作流程,对于创建代理对象的源码进行了深度分析! ...
- Spring基础专题——第十一章(高级注解编程完结)
前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...
- Spring基础专题——第九章(基础注解编程——上)
目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从一个互联网职场小白到一个沪漂湿人,一路让我知道分享是一件多么重要的事情 ...
- Spring基础专题——第三章(反转控制与依赖注入)
前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...
- Spring MVC 原理探秘 - 容器的创建过程
1.简介 在上一篇文章中,我向大家介绍了 Spring MVC 是如何处理 HTTP 请求的.Spring MVC 可对外提供服务时,说明其已经处于了就绪状态.再次之前,Spring MVC 需要进行 ...
- Spring IOC 容器源码分析 - 创建单例 bean 的过程
1. 简介 在上一篇文章中,我比较详细的分析了获取 bean 的方法,也就是getBean(String)的实现逻辑.对于已实例化好的单例 bean,getBean(String) 方法并不会再一次去 ...
最新文章
- 思科——单臂路由与DHCP的结合
- scanf与gets的区分
- WPF 实现展示反应盘、者试剂仓控件
- clob mybatis_spring + mybatis 存取clob
- 计算机维修工具和仪器,浮球液位计介绍微型计算机常用维修工具和仪器
- ubuntu安装redis_在Ubuntu上安装Redis
- F1-Score相关概念
- 使用rem单位布局的时候有什么好处_好程序员web前端技术分享移动端页面布局
- 计算机软件考试高级工程师,软考高级工程师容易考吗
- 获取随机数的n种方法,你知道几种
- 一个奇鸽船新版本 v1.32
- nividia-smi命令不显示占用显卡的进程
- 硬盘分区总结(小东子)
- python常用的正则符号汇总
- mysql连接字符串_[MySQL] - MySQL连接字符串总结
- charlesfiddler安卓手机安装系统级ca证书抓取https请求信息
- java废弃方法_JAVA9之后废弃newInstance()方法
- 【JVM 学习笔记 05】:JVM性能调优工具的使用和优化案例
- 2022 最新版前端工程师面试题手册
- FFmpeg进阶:生成视频的缩略图
热门文章
- C语言字符char和整型int的关系
- 使用Boost的Serialization库序列化STL标准容器
- Linux简单的颜色设置
- java bufferedimage颜色_使用BufferedImage进行渐变色操作
- java aes php_php和java的aes默认加密算法有点区别及解决方法。
- html中使用地图和area,根据参数对area的颜色进行改变,AE考试题
- mingle_大众汽车品牌SUV之夜,数千平米的mingle区和超长弧面屏了解一下?
- Java项目:医院预约挂号系统(java+SpringBoot+Maven+Vue+mysql)
- suse linux登录黑屏,SUSE Linux登录时黑屏解决办法
- python答辩结束语_Beta答辩总结