当前位置: 首页 > 编程日记 > 正文

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

相关文章:

查看进程 端口

2019独角兽企业重金招聘Python工程师标准>>> 一 进程 ps -ef 1.UID 用户ID2.PID 进程ID3.PPID 父进程ID4.C CPU占用率5.STIME 开始时间6.TTY 开始此进程的TTY7.TIME 此进程运行的总时间8.CMD 命令名 二端口 netstat Linux下如果我…

深度学习中的欠拟合和过拟合简介

通常情况下&#xff0c;当我们训练机器学习模型时&#xff0c;我们可以使用某个训练集&#xff0c;在训练集上计算一些被称为训练误差(training error)的度量误差&#xff0c;目标是降低训练误差。机器学习和优化不同的地方在于&#xff0c;我们也希望泛化误差(generalization …

今日头条首次改进DQN网络,解决推荐中的在线广告投放问题

&#xff08;图片付费下载自视觉中国&#xff09;作者 | 深度传送门来源 | 深度传送门&#xff08;ID:gh_5faae7b50fc5&#xff09;【导读】本文主要介绍今日头条推出的强化学习应用在推荐的最新论文[1]&#xff0c;首次改进DQN网络解决推荐中的在线广告投放问题。背景介绍随着…

RPA实施过程中可能会遇到的14个坑

RPA的实施过程并非如我们所想的那样&#xff0c;总是一帆风顺。碰坑&#xff0c;在所难免。但也不必为此过于惊慌&#xff0c;因为&#xff0c;我们已经帮你把RPA实施之路上的坑找了出来。RPA实施过程中&#xff0c;将会遇到哪些坑&#xff1f; 【不看全文大纲版】●组织层面&a…

Android问题汇总

2019独角兽企业重金招聘Python工程师标准>>> 1. Only the original thread that created a view hierarchy can touch its views 在初始化activity是需要下载图片&#xff0c;所以重新开启了一个线程&#xff0c;下载图片更新ui&#xff0c;此时就出现了上面的错误。…

深度学习中的验证集和超参数简介

大多数机器学习算法都有超参数&#xff0c;可以设置来控制算法行为。超参数的值不是通过学习算法本身学习出来的(尽管我们可以设计一个嵌套的学习过程&#xff0c;一个学习算法为另一个学习算法学出最优超参数)。在多项式回归示例中&#xff0c;有一个超参数&#xff1a;多项式…

自定义View合辑(8)-跳跃的小球(贝塞尔曲线)

为了加强对自定义 View 的认知以及开发能力&#xff0c;我计划这段时间陆续来完成几个难度从易到难的自定义 View&#xff0c;并简单的写几篇博客来进行介绍&#xff0c;所有的代码也都会开源&#xff0c;也希望读者能给个 star 哈 GitHub 地址&#xff1a;github.com/leavesC/…

分析Booking的150种机器学习模型,我总结了六条成功经验

&#xff08;图片付费下载自视觉中国&#xff09;作者 | Adrian Colyer译者 | Monanfei出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;本文是一篇有趣的论文&#xff08;150 successful machine learning models: 6 lessons learned at Booking.com Bernadi et al.,…

Android官方提供的支持不同屏幕大小的全部方法

2019独角兽企业重金招聘Python工程师标准>>> 本文将告诉你如何让你的应用程序支持各种不同屏幕大小&#xff0c;主要通过以下几种办法&#xff1a; 让你的布局能充分的自适应屏幕根据屏幕的配置来加载合适的UI布局确保正确的布局应用在正确的设备屏幕上提供可以根据…

C++/C++11中头文件iterator的使用

<iterator>是C标准程序库中的一个头文件&#xff0c;定义了C STL标准中的一些迭代器模板类&#xff0c;这些类都是以std::iterator为基类派生出来的。迭代器提供对集合(容器)元素的操作能力。迭代器提供的基本操作就是访问和遍历。迭代器模拟了C中的指针&#xff0c;可以…

从多媒体技术演进看AI技术

&#xff08;图片付费下载自视觉中国&#xff09;文 / LiveVideoStack主编 包研在8月的LiveVideoStackCon2019北京开场致辞中&#xff0c;我分享了一组数据——把2019年和2017年两场LiveVideoStackCon上的AI相关的话题做了统计&#xff0c;这是数字从9.3%增长到31%&#xff0c;…

五. python的日历模块

一 .日历 import calendar# 日历模块# 使用# 返回指定某年某月的日历 print(calendar.month(2017,7))# July 2017 # Mo Tu We Th Fr Sa Su # 1 2 # 3 4 5 6 7 8 9 # 10 11 12 13 14 15 16 # 17 18 19 20 21 22 23 # 24 25 26 27 28 29 30 # 31# 返…

Linux下的Shell工作原理

为什么80%的码农都做不了架构师&#xff1f;>>> Linux系统提供给用户的最重要的系统程序是Shell命令语言解释程序。它不 属于内核部分&#xff0c;而是在核心之外&#xff0c;以用户态方式运行。其基本功能是解释并 执行用户打入的各种命令&#xff0c;实现用户与L…

C++/C++11中头文件functional的使用

<functional>是C标准库中的一个头文件&#xff0c;定义了C标准中多个用于表示函数对象(function object)的类模板&#xff0c;包括算法操作、比较操作、逻辑操作&#xff1b;以及用于绑定函数对象的实参值的绑定器(binder)。这些类模板的实例是具有函数调用运算符(functi…

飞天AI平台到底哪里与众不同?听听它的架构者怎么说

采访嘉宾 | 林伟 整理 | 夕颜 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 天下没有不散的宴席。 9 月 25 日&#xff0c;云栖大会在云栖小镇开始&#xff0c;历经三天的技术盛宴&#xff0c;于 9 月 27 日的傍晚结束。 三天、全球6.7万人现场参会、超1250万人…

浅谈 sessionStorage、localStorage、cookie 的区别以及使用

1、sessionStorage、localStorage、cookie 之间的区别 相同点 cookie 和 webStorage 都是用来存储客户端的一些信息不同点 localStorage localStorage 的生命周期是 永久的。也就是说 只要不是 手动的去清除。localStorage 会一直存储 sessionStorage 相反 sessionStorage 的生…

任务栏窗口和状态图标的闪动 z

Demo程序&#xff1a; 实现任务栏窗体和图标的闪动&#xff1a; 整个程序是基于Windows Forms的&#xff0c;对于任务栏右下角状态图标的闪动&#xff0c;创建了一个类型&#xff1a;NotifyIconAnimator&#xff0c;基本上是包装了Windows Forms中的NotifyIcon类型&#xff0c;…

深度学习中的最大似然估计简介

统计领域为我们提供了很多工具来实现机器学习目标&#xff0c;不仅可以解决训练集上的任务&#xff0c;还可以泛化。例如参数估计、偏差和方差&#xff0c;对于正式地刻画泛化、欠拟合和过拟合都非常有帮助。点估计&#xff1a;点估计试图为一些感兴趣的量提供单个”最优”预测…

简单粗暴上手TensorFlow 2.0,北大学霸力作,必须人手一册!

&#xff08;图片付费下载自视觉中国&#xff09; 整理 | 夕颜 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 【导读】 TensorFlow 2.0 于近期正式发布后&#xff0c;立即受到学术界与科研界的广泛关注与好评。此前&#xff0c;AI 科技大本营曾特邀专家回顾了 Te…

常见运维漏洞-Rsync-Redis

转载于:https://blog.51cto.com/10945453/2394651

zabbix笔记

&#xff08;1&#xff09;转载于:https://blog.51cto.com/zlong37/1406441

C++/C++11中头文件algorithm的使用

<algorithm>是C标准程序库中的一个头文件&#xff0c;定义了C STL标准中的基础性的算法(均为函数模板)。<algorithm>定义了设计用于元素范围的函数集合。任何对象序列的范围可以通过迭代器或指针访问。 std::adjacent_find&#xff1a;在序列中查找第一对相邻且值…

js filter 用法

filter filter函数可以看成是一个过滤函数&#xff0c;返回符合条件的元素的数组 filter需要在循环的时候判断一下是true还是false&#xff0c;是true才会返回这个元素&#xff1b; filter()接收的回调函数&#xff0c;其实可以有多个参数。通常我们仅使用第一个参数&#xff…

每30秒学会一个Python小技巧,GitHub星数4600+

&#xff08;图片付费下载自视觉中国&#xff09;作者 | xiaoyu&#xff0c;数据爱好者来源 | Python数据科学&#xff08;ID:PyDataScience&#xff09;很多学习Python的朋友在项目实战中会遇到不少功能实现上的问题&#xff0c;有些问题并不是很难的问题&#xff0c;或者已经…

Nginx自定义模块编写:根据post参数路由到不同服务器

Nginx可以轻松实现根据不同的url 或者 get参数来转发到不同的服务器&#xff0c;然而当我们需要根据http包体来进行请求路由时&#xff0c;Nginx默认的配置规则就捉襟见肘了&#xff0c;但是没关系&#xff0c;Nginx提供了强大的自定义模块功能&#xff0c;我们只要进行需要的扩…

深度学习中的贝叶斯统计简介

贝叶斯用概率反映知识状态的确定性程度。数据集能够被直接观测到&#xff0c;因此不是随机的。另一方面&#xff0c;真实参数θ是未知或不确定的&#xff0c;因此可以表示成随机变量。在观察到数据前&#xff0c;我们将θ的已知知识表示成先验概率分布(prior probability distr…

少走弯路:强烈推荐的TensorFlow快速入门资料(可下载)

&#xff08;图片付费下载自视觉中国&#xff09;作者 | 黄海广来源 | 机器学习初学者&#xff08;ID: ai-start-com&#xff09;知识更新非常快&#xff0c;需要一直学习才能跟上时代进步&#xff0c;举个例子&#xff1a;吴恩达老师在深度学习课上讲的TensorFlow使用&#xf…

有状态bean与无状态bean

在学习bean的作用域的时候&#xff0c;了解了这个问题。 bean5种作用域&#xff1a;分别是&#xff1a;singleton、prototype、request、session、gloabal session 接下来就讲一下有状态bean与无状态bean&#xff1a; 有状态会话bean &#xff1a;每个用户有自己特有的一个实例…

从Developer Removed From Sale 回到可下载状态的方法

2019独角兽企业重金招聘Python工程师标准>>> 如果你不小心点了”Remove“ 按钮&#xff0c;App的状态会变成"Developer Removed From Sale "&#xff0c;这时&#xff0c;即使更新应用也无法改变这个状态。想要让App恢复可下载状态&#xff0c;你需要尝试…

朴素贝叶斯分类器简介及C++实现(性别分类)

贝叶斯分类器是一种基于贝叶斯定理的简单概率分类器。在机器学习中&#xff0c;朴素贝叶斯分类器是一系列以假设特征之间强(朴素)独立下运用贝叶斯定理为基础的简单概率分类器。朴素贝叶斯是文本分类的一种热门(基准)方法&#xff0c;文本分类是以词频为特征判断文件所属类别或…