之前学了,配置bean可以用普通全类名配置、用工厂方法配置,FactoryBean又是什么呢

有时候配置bean要用到,IOC其他Bean,这时,用FactoryBean配置最合适。

FactoryBean是一个接口,要用的话就要实现它。他有三个方法:

  getObject()  //返回bean对象

  getObjectType()  //返回bean的类型

   isSingleton()   //是否单例

弄个例子:

Car类

 package com.guigu.spring.factorybean;

 public class Car {
private String brand;
private double price; public Car(){
}
public Car(String brand,double price){
this.brand=brand;
this.price=price;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Car [brand=" + brand + ", price="+price +"]";
}
}

CarFactoryBean.java

 package com.guigu.spring.factorybean;

 import org.springframework.beans.factory.FactoryBean;

 public class CarFactoryBean implements FactoryBean<Car> {

     private String brand;

     //返回bean对象
@Override
public Car getObject() throws Exception {
return new Car(brand,500000);
} //返回bean的类型
@Override
public Class<?> getObjectType() {
return Car.class;
}
//是否单例
@Override
public boolean isSingleton() {
return true;
} public void setBrand(String brand) {
this.brand = brand;
} }

bean-beanfactory中要配置的bean

   <bean id="car" class="com.guigu.spring.factorybean.CarFactoryBean">
<property name="brand" value="BMW"></property>
</bean>

main函数

     public static void main(String[] args) {

         ApplicationContext ctx =new ClassPathXmlApplicationContext("bean-beanfactory.xml");
Car car=(Car) ctx.getBean("car");
System.out.println(car); }

输出:

Car[brand=BMW, price=500000]

学到这里,我想了想,好像和一开始用类名配置的没什么区别啊!

再看一下xml中的笔记:

      <!--
通过 FactoryBean 来配置Bean 的实例
class : 指向 FactoryBean 的全类名
property :配置 FactoryBean 的属性
但实际返回实例确是 FactoryBean 的 getObject() 方法返回的实例! --> <bean id="car" class="com.guigu.spring.factorybean.CarFactoryBean">
<property name="brand" value="BMW"></property>
</bean>

但实际返回实例确是 FactoryBean 的 getObject() 方法返回的实例!

估计就是这里了,区别应该就是父接口带来的三个方法,后面会继续看

另外说一下,这个FactoryBean 不是前面的BeanFactory

之前的笔记:

Spring学习记录(十)---使用FactoryBean配置Bean的更多相关文章

  1. Spring4.0学习笔记(7) —— 通过FactoryBean配置Bean

    1.实现Spring 提供的FactoryBean接口 package com.spring.facoryBean; import org.springframework.beans.factory. ...

  2. Spring学习记录(十二)---AOP理解和基于注解配置

    Spring核心之二:AOP(Aspect Oriented Programming) --- 面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软 ...

  3. Spring学习记录(十四)---JDBC基本操作

    先看一些定义: 在Spring JDBC模块中,所有的类可以被分到四个单独的包:1.core即核心包,它包含了JDBC的核心功能.此包内有很多重要的类,包括:JdbcTemplate类.SimpleJ ...

  4. Spring 学习记录6 BeanFactory(2)

    主题 除了Spring 学习记录5 BeanFactory 里写的几个接口外,BeanFactory的实现类还实现了一些其他接口,这篇文章主要介绍这些接口和实现类. 结构 DefaultListabl ...

  5. 我的Spring学习记录(二)

    本篇就简单的说一下Bean的装配和AOP 本篇的项目是在上一篇我的Spring学习记录(一) 中项目的基础上进行开发的 1. 使用setter方法和构造方法装配Bean 1.1 前期准备 使用sett ...

  6. 我的Spring学习记录(四)

    虽然Spring管理这我们的Bean很方便,但是,我们需要使用xml配置大量的Bean信息,告诉Spring我们要干嘛,这还是挺烦的,毕竟当我们的Bean随之增多的话,xml的各种配置会让人很头疼. ...

  7. 我的Spring学习记录(五)

    在我的Spring学习记录(四)中使用了注解的方式对前面三篇做了总结.而这次,使用了用户登录及注册来对于本人前面四篇做一个应用案例,希望通过这个来对于我们的Spring的使用有一定的了解. 1. 程序 ...

  8. Spring 学习记录8 初识XmlWebApplicationContext(2)

    主题 接上文Spring 学习记录7 初识XmlWebApplicationContext refresh方法 refresh方法是定义在父类AbstractApplicationContext中的. ...

  9. Spring 学习记录3 ConversionService

    ConversionService与Environment的关系 通过之前的学习(Spring 学习记录2 Environment),我已经Environment主要是负责解析properties和p ...

随机推荐

  1. 解决Ubuntu安装openssh-server依赖问题

    sudo apt-get install openssh-server 提示:openssh-server : 依赖: openssh-client (= 1:6.6p1-2ubuntu1) 解决 u ...

  2. Code First 关系配置整理

    之前EF一直有性能问题以及使用便利性问题, 终于到了EF6有了Migrations之后, 小弟也决定加入EF阵营了. 在学习FluentAPI配置关系的时候, 发现网上的好几个教程实际上博主自己都没有 ...

  3. T-SQL Recipes之Customized Database Objects

    The Problem 创建灵活自定义对象决非是一个简单的任务.比如HR想看每种工作职称在所有年限里面的入职累计情况 The Solution 我们一步一步来拆解吧: 获取入职年限的集合,如1999, ...

  4. 弱省互测#0 t2

    题意 给定两个字符串 A 和 B,求下面四个问题的答案: 1.在 A 的子串中,不是 B 的子串的字符串的数量. 2.在 A 的子串中,不是 B 的子序列的字符串的数量. 3.在 A 的子序列中,不是 ...

  5. Qt下的udp编程

    项目需要一个基于udp的客户端, 看着Qt是有个QUdpSocket的类的, 但自带的例子和类的说明都没咋说明白: 怎么用一个QUdpSocket既当发送端, 又当接收端? 谷歌一顿后, 发现很多老内 ...

  6. 使用docker toolbox 在windows上搭建统一环境

    1.先下载docker toolbox 以下是下载地址: http://get.daocloud.io/#install-docker-for-mac-windows 2.下载安装 git windo ...

  7. HTML5 audio与video标签实现视频播放,音频播放

    随着互联网的飞速发展以及HTML5的应用,越来越多的项目中用到video,audio当常用标签. <audio> 标签属性 <audio src="song.mp3&quo ...

  8. ExecutorService与ThreadPoolTaskExecutor

    1.ExecutorService private static ExecutorService exec = null; public static ExecutorService getExecu ...

  9. gulp-less解决遇到错误停止执行task

    来龙去脉 在用less+gulp开发时,有时候代码还没写完整,不小心保存了一下,然后gulp就开始执行gulp-less的task. 但是代码是有问题的,这时候会输出一个Potentially unh ...

  10. 最小生成树 prime poj1287

    poj1287 裸最小生成树 代码 #include "map" #include "queue" #include "math.h" #i ...