Spring FactoryBean用法
2024-08-26 09:54:46
最近在看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出来有什么不同
最新文章
- logback配置详解2<;appender>;
- sql 列转行
- 深入分析ClassLoader
- win7下折腾filezilla_client
- thymeleaf中的模板布局
- java_利用session校验图片认证码
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
- ASP.NET 表单认证与角色授权
- getopt、getopt_long和getopt_long_only
- 在SQL2008中,如何让id自动生成并自动递增?如何让时间默认生成?
- 模仿快递路线图的html, css 样式
- Asp.Net 常用工具类---Config操作(7)
- 压缩感知“Hello World”代码初步学习
- redhat6.5 redis单节点多实例3A集群搭建
- 最小费用最大流 HDU1533
- 对偶图 并查集 BZOJ4423
- MVVM模式的命令绑定
- 如何在Windows Server 2008 R2下搭建FTP服务
- windows下使用GNU make命令报错的解决方法
- SpringBoot项目打包成jar后,启动脚本
热门文章
- LOJ#6544. 杀苍蝇(计算几何)
- Flask_WTF升级到最新版本
- iphone 自学常用网址
- Java网络编程以及简单的聊天程序
- mysql的left join、 right join和inner join
- Mac使用Launchd命令行lauchctl操作服务的简单用法
- Mac下常用按键符号⌘(command)、⌥(option)、⇧(shift)、⇪(caps lock)、⌃(control)、↩(return)、⌅(enter)
- Sublime Text 3新建工程
- Mono for android彻底退出程序
- [DPF] DB2 DPF 搭建实战