网上看了很多关于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简介的更多相关文章

  1. FactoryBean简介以及Mybatis-Spring应用

    一.BeanFactory和FactoryBean区别? BeanFactory是工厂类,提供了获取和检索Bean的接口.它代表着Spring的IoC容器,负责Bean实例化以及管理Bean之间的依赖 ...

  2. 前置知识: FactoryBean的作用

    FactoryBean 简介 FactoryBean是Spring中一种特殊的Bean,是用于创建Bean对象的,最大的作用便是可以让我们自定义Bean的创建过程.如果你在XML配置文件配置了一个节点 ...

  3. Spring(十四):使用FactoryBean配置Bean

    FactoryBean简介: 1)Spring中Bean包含两种一种是普通Bean,另外一种是FactoryBean.它们都受IOC容器管理,但是也有不同之处. 2)普通Bean与FactoryBea ...

  4. BeanFactory 简介以及它 和FactoryBean的区别(阿里面试)

    BeanFacotry是spring中比较原始的Factory.如XMLBeanFactory就是一种典型的BeanFactory.原始的BeanFactory无法支持spring的许多插件,如AOP ...

  5. BeanFactory 简介以及它 和FactoryBean的区别

    BeanFacotry是spring中比较原始的Factory.如XMLBeanFactory就是一种典型的BeanFactory.原始的BeanFactory无法支持spring的许多插件,如AOP ...

  6. Spring 系列: Spring 框架简介 -7个部分

    Spring 系列: Spring 框架简介 Spring AOP 和 IOC 容器入门 在这由三部分组成的介绍 Spring 框架的系列文章的第一期中,将开始学习如何用 Spring 技术构建轻量级 ...

  7. Spring 系列: Spring 框架简介(转载)

    Spring 系列: Spring 框架简介 http://www.ibm.com/developerworks/cn/java/wa-spring1/ Spring AOP 和 IOC 容器入门 在 ...

  8. Spring系列__02IOC模块简介

    Spring的两大核心功能就是IOC和AOP,这篇文章主要介绍IOC. 简单来说,在面向对象思想下,A类中有一个B类的属性, 那么我们在创建A类时往往需要同时创建一个B类的对象,以便A类对其进行调用. ...

  9. spring框架篇(一)-------spring简介与配置文件使用控制反转事例

    spring简介 Spring 是一个开源框架,中文意思就是春天,也许是作者想让自己的这个框架给Java开发人员带来春天吧.其官方网站是 https://spring.io/ ,可以在官方网站下载到完 ...

随机推荐

  1. C++开发人脸性别识别教程(12)——加入性别识别功能

    经过之前几篇博客的解说,我们已经成功搭建了MFC应用框架,并实现了主要的图像显示和人脸检測程序,在这篇博文中我们要向当中加入性别识别代码. 关于性别识别,之前已经专门拿出两篇博客的篇幅来进行解说.这里 ...

  2. 热修复JSPatch之实战教程

      接上篇<热修复JSPatch之接口设计>,在这篇文章主要给大家讲述一下怎样高速具备热修复能力,当然了假设有人有志于把JSPatch系统的学习,甚至用JSPatch进行开发的.就没有必要 ...

  3. Maven—Windows操作系统中安装配置Maven环境

    今天难得的周末,借此难的机会总结一下关于maven的一些操作: 1.在安装maven之前要确认计算机已经安装并配置了JDK. 2.下载maven: maven-3.0.3:http://downloa ...

  4. Swift3.0中关于日期类的使用指引

    日期的处理在大大小小的iOS项目中都十分常见,随着Swift3.0正式版的即将推出,语法的改变让NSDate以及相关类的使用都与之前略有不同,这里将会对基于Swift3.0版本的NSDate及相关类的 ...

  5. Nginx调优实战

    Nginx配置文件性能微调 全局的配置 user www-data; pid /var/run/nginx.pid; worker_processes auto; worker_rlimit_nofi ...

  6. 【BZOJ3218】【UOJ#77】a + b Problem

    题目 题目在这里 思路&做法 明显的最小割(其实是之前做过一道类似的题) S向每一个格子连容量为\(b_i\)的边 每一个格子向T连容量为\(w_i\)的边 对于格子\(i\)向满足条件的格子 ...

  7. ansible usually

    链接地址:https://my.oschina.net/kangvcar/blog/1830155

  8. href 与 src

    href:常用有两个标签<a>和<link> 1.<a href="http://www.w3school.com.cn">W3School&l ...

  9. [Offer收割]编程练习赛40

    不到一个小时AK,虽然是VP的,舒服,第一次.都简单的一比,没什么可说的. 查找三阶幻方 #pragma comment(linker, "/STACK:102400000,10240000 ...

  10. (转)redux

    随着 JavaScript 单页应用开发日趋复杂,越来越多的 state (状态)需要在前端进行管理. 这些 state 可能包括服务器响应.缓存数据.本地生成尚未持久化到服务器的数据,也包括 UI ...