FactoryBean简介
网上看了很多关于FactoryBean和BeanFactory的介绍,总感觉说的不够简单、直白,今天用自己的语言来描述下,如果有不对的地方,还请大家指正。
1. FactoryBean和BeanFactory的区别
这点其实是大家最关心或者说最困惑的地方,其实从最简单的字面上来看,BeanFactory是个用来创建Bean的Factory(BeanFactory是bean工厂的顶层接口),它的作用是用来创建Bean的,总之一句话,它是个Factory,一个用来创建Bean的Factory。
而FactoryBean是个Bean,就是一个普普通通简简单单的Bean,只是Spring中所有的Bean都实现了这个Bean或者间接实现了这个Bean。也是一句话,FactoryBean就是一个Bean。
BeanFactory创建出来的每个Bean都是FactoryBean!!!!!!最最简单经典的解释。
2. FactoryBean的由来和背景在Spring中创建Bean的首选方法就是在配置文件中配置bean的信息,让IOC容器创建一个Bean,然后DI。Bean的创建、Bean之间的依赖统统地交给IOC来管,老子懒得管。但是在有些情况下配置也会很复杂,还是自己手写一个Bean最简单,那么怎么手写一个Bean呢?好了,这个时候只要implements FactoryBean就行了,例子如下。
这里要注意一点:getBean()方法返回的是FactoryBean的getObject()方法,返回的是一个Object!!!!!!,不是FactoryBean!!!!!!!
要获得FactoryBean得要用getBean(&name)方法;
Car car = (Car) factory.getBean("car");
FactoryBean fb = (FactoryBean) factory.getBean("&car");
try {
Car car2 = (Car)fb.getObject();
car2.getCarInfos();
} catch (Exception e) {
e.printStackTrace();
}
package springtest.factorybean;
import org.springframework.beans.factory.FactoryBean;
public class CarFactoryBean implements FactoryBean<Car> {
private String carInfo;
@Override
public Car getObject() throws Exception {
Car car = new Car();
String[] infos = carInfo.split(",");
car.setBrand(infos[0]);
car.setMaxSpeed(Integer.valueOf(infos[1]));
car.setPrice(Double.parseDouble(infos[2]));
return car;
}
@Override
public Class<?> getObjectType() {
return Car.class;
}
@Override
public boolean isSingleton() {
return false;
}
public String getCarInfo() {
return this.carInfo;
}
public void setCarInfo(String carInfo) {
this.carInfo = carInfo;
}
}
<bean name = "car" class="springtest.factorybean.CarFactoryBean">
<property name="carInfo" value="超级跑车,400,2000000" />
</bean>
public class FactoryBeanTest {
public static void main(String[] args) {
BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
Car car = (Car) factory.getBean("car");
car.getCarInfos();
}
}
FactoryBean简介的更多相关文章
- FactoryBean简介以及Mybatis-Spring应用
一.BeanFactory和FactoryBean区别? BeanFactory是工厂类,提供了获取和检索Bean的接口.它代表着Spring的IoC容器,负责Bean实例化以及管理Bean之间的依赖 ...
- 前置知识: FactoryBean的作用
FactoryBean 简介 FactoryBean是Spring中一种特殊的Bean,是用于创建Bean对象的,最大的作用便是可以让我们自定义Bean的创建过程.如果你在XML配置文件配置了一个节点 ...
- Spring(十四):使用FactoryBean配置Bean
FactoryBean简介: 1)Spring中Bean包含两种一种是普通Bean,另外一种是FactoryBean.它们都受IOC容器管理,但是也有不同之处. 2)普通Bean与FactoryBea ...
- BeanFactory 简介以及它 和FactoryBean的区别(阿里面试)
BeanFacotry是spring中比较原始的Factory.如XMLBeanFactory就是一种典型的BeanFactory.原始的BeanFactory无法支持spring的许多插件,如AOP ...
- BeanFactory 简介以及它 和FactoryBean的区别
BeanFacotry是spring中比较原始的Factory.如XMLBeanFactory就是一种典型的BeanFactory.原始的BeanFactory无法支持spring的许多插件,如AOP ...
- Spring 系列: Spring 框架简介 -7个部分
Spring 系列: Spring 框架简介 Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级 ...
- Spring 系列: Spring 框架简介(转载)
Spring 系列: Spring 框架简介 http://www.ibm.com/developerworks/cn/java/wa-spring1/ Spring AOP 和 IOC 容器入门 在 ...
- Spring系列__02IOC模块简介
Spring的两大核心功能就是IOC和AOP,这篇文章主要介绍IOC. 简单来说,在面向对象思想下,A类中有一个B类的属性, 那么我们在创建A类时往往需要同时创建一个B类的对象,以便A类对其进行调用. ...
- spring框架篇(一)-------spring简介与配置文件使用控制反转事例
spring简介 Spring 是一个开源框架,中文意思就是春天,也许是作者想让自己的这个框架给Java开发人员带来春天吧.其官方网站是 https://spring.io/ ,可以在官方网站下载到完 ...
随机推荐
- 解决MyEclipse开启后总是不停的在Update index
近期MyEclipse开启之后总是不停的在 update index,非常是耗时间. 查找资料发现Update index...是Maven在不断更新, 解决的方法例如以下: Window --> ...
- Aizu/Aoj 0121 Seven Puzzle
这题应该算是经典的八数码问题的弱化版吧:给你一个4x2的方版,上面有0-7 八个数字,每次只能让编号0的方格跟他的上下左右的方格交换:所以也就是把方格0当做空格看待,每次只有空格周围的方格能够向空格处 ...
- 黑马程序猿——JAVA基础——集合
----------android培训.java培训.java学习型技术博客.期待与您交流.------------ 一.关于java中的集合类 首先看一下,大致的框架流程图 ...
- SVNserver搭建和使用(二)
上一篇介绍了VisualSVN Server和TortoiseSVN的下载,安装,汉化.这篇介绍一下怎样使用VisualSVN Server建立版本号库,以及TortoiseSVN的使用. 首先打开V ...
- Window上python 开发--1.搭建开发环境
事实上在开发python最好在ubuntu环境下,简单也便于扩展各个package.可是我的linux的电脑临时不在身边.还的我老婆的电脑win7没办法啊. 因为python的跨平台性.在window ...
- 【BZOJ1029】【JSOI2007】【建筑抢修】【贪心+堆】
Description 小刚在玩JSOI提供的一个称之为"建筑抢修"的电脑游戏:经过了一场激烈的战斗,T部落消灭了全部z部落的入侵者.可是T部落的基地里已经有N个建筑设施受到了严重 ...
- 略过天涯 深入浅出VGA和DVI接口【转】
本文转载自:http://www.cnblogs.com/lueguo/p/3373649.html 由CrazyBingo修改…… 前言:目前显示器的主流接口是VGA.DVI以及HDMI,再加上一个 ...
- Linq的Except
https://msdn.microsoft.com/en-us/library/bb300779(v=vs.100).aspx , , , }; , , , }; var list = list1. ...
- php添加文件到压缩文件夹
extension=php_zip.dll注释掉 <?php$filename = "test.zip"; ob_end_clean(); $zip = new ZipArc ...
- Kafka .NET操作
Kafaka .NET连接 Kafka目前主流在用的.NET客户端有两个:一个是kafka-net,另外一个是Confluent.Kafka,这里给出使用示例: kafka-net示例: public ...