最近在看spring ioc源码,看到FactoryBean这个内容。这个和BeanFactory的区别

1. BeanFactory: 生成bean的工厂,是一个接口,定义了很多方法

2. FactoryBean: 是一个Bean,生产bean的bean

下面是一个demo,用于获取Person的FactoryBean

Person.java

/**
* @Author: <guanxianseng@163.com>
* @Description:
* @Date: Created in : 2018/12/10 8:01 AM
**/
public class Person {
private String name;
private int age;
private String city; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getCity() {
return city;
} public void setCity(String city) {
this.city = city;
} @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", city='" + city + '\'' +
'}';
}
}

PersonFactoryBean.java

import org.springframework.beans.factory.FactoryBean;

/**
* @Author: <guanxianseng@163.com>
* @Description:
* @Date: Created in : 2018/12/10 8:02 AM
**/
public class PersonFactoryBean implements FactoryBean<Person> {
private String personInfo; public Person getObject() throws Exception {
Person person = new Person();
String[] personInfos = personInfo.split(",");
person.setName(personInfos[0]);
person.setAge(Integer.parseInt(personInfos[1]));
person.setCity(personInfos[2]);
return person;
} public Class<?> getObjectType() {
return Person.class;
} public boolean isSingleton() {
return true;
} public String getPersonInfo() {
return personInfo;
} public void setPersonInfo(String personInfo) {
this.personInfo = personInfo;
}
}

beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="person" class="com.gxf.mybatis.TestFactoryBean.PersonFactoryBean">
<property name="personInfo">
<value>guanxianseng,28,chengdu</value>
</property>
</bean> </beans>

Test.java测试一下

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* @Author: <guanxianseng@163.com>
* @Description:
* @Date: Created in : 2018/12/10 8:05 AM
**/
public class Test { public static void main(String[] args) throws Exception {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("mytestbeans.xml");
PersonFactoryBean personFactoryBean = (PersonFactoryBean) applicationContext.getBean("&person");
System.out.println("personFactoryBean:" + personFactoryBean);
System.out.println("personFactoryBean.getObject()" + personFactoryBean.getObject());
Person person = (Person) applicationContext.getBean("person");
System.out.println(person);
}
}

这里主要测了两个内容

1. FactoryBean.getObject()返回Person

2. 从spring容器中获取factoryBean实例的前缀 &

TODO:

1. factorybean 和其他bean实例化有什么不同

2. factorybean 和其他bean从spring中get出来有什么不同

最新文章

  1. logback配置详解2&lt;appender&gt;
  2. sql 列转行
  3. 深入分析ClassLoader
  4. win7下折腾filezilla_client
  5. thymeleaf中的模板布局
  6. java_利用session校验图片认证码
  7. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
  8. ASP.NET 表单认证与角色授权
  9. getopt、getopt_long和getopt_long_only
  10. 在SQL2008中,如何让id自动生成并自动递增?如何让时间默认生成?
  11. 模仿快递路线图的html, css 样式
  12. Asp.Net 常用工具类---Config操作(7)
  13. 压缩感知“Hello World”代码初步学习
  14. redhat6.5 redis单节点多实例3A集群搭建
  15. 最小费用最大流 HDU1533
  16. 对偶图 并查集 BZOJ4423
  17. MVVM模式的命令绑定
  18. 如何在Windows Server 2008 R2下搭建FTP服务
  19. windows下使用GNU make命令报错的解决方法
  20. SpringBoot项目打包成jar后,启动脚本

热门文章

  1. LOJ#6544. 杀苍蝇(计算几何)
  2. Flask_WTF升级到最新版本
  3. iphone 自学常用网址
  4. Java网络编程以及简单的聊天程序
  5. mysql的left join、 right join和inner join
  6. Mac使用Launchd命令行lauchctl操作服务的简单用法
  7. Mac下常用按键符号⌘(command)、⌥(option)、⇧(shift)、⇪(caps lock)、⌃(control)、↩(return)、⌅(enter)
  8. Sublime Text 3新建工程
  9. Mono for android彻底退出程序
  10. [DPF] DB2 DPF 搭建实战