1 BeanFactory 是ioc容器的底层实现接口,是ApplicationContext 顶级接口

spring不允许我们直接操作 BeanFactory  bean工厂,所以为我们提供了ApplicationContext 这个接口 此接口集成BeanFactory 接口,ApplicationContext包含BeanFactory的所有功能,同时还进行更多的扩展。

BeanFactory  接口又衍生出以下接口,其中我们经常用到的是ApplicationContext 接口

ApplicationContext 继承图

CongihuableApplicationContext 中添加了一些方法:

... 其他省略

    //刷新ioc容器上下文
void refresh() throws BeansException, IllegalStateException; // 关闭此应用程序上下文,释放所有资源并锁定,销毁所有缓存的单例bean。
@Override
void close(); //确定此应用程序上下文是否处于活动状态,即,是否至少刷新一次且尚未关闭。
boolean isActive(); ... 其他省略

主要作用在ioc容器进行相应的刷新,关闭等操作!

FileSystemXmlApplicationContext 和ClassPathXmlApplicationContext 是用来读取xml文件创建bean对象
ClassPathXmlApplicationContext : 读取类路径下xml 创建bean
FileSystemXmlApplicationContext :读取文件系统下xml创建bean
AnnotationConfigApplicationContext 主要是注解开发获取ioc中的bean实例

2 FactoryBean 是spirng提供的工厂bean的一个接口

FactoryBean 接口提供三个方法,用来创建对象,

FactoryBean 具体返回的对象是由getObject 方法决定的。

*/
public interface FactoryBean<T> { //创建的具体bean对象的类型
@Nullable
T getObject() throws Exception; //工厂bean 具体创建具体对象是由此getObject()方法来返回的
@Nullable
Class<?> getObjectType(); //是否单例
default boolean isSingleton() {
return true;
} }

创建一个FactoryBean 用来生产User对象

@Component
public class FactoryBeanTest implements FactoryBean<User> { //创建的具体bean对象的类型
@Override
public Class<?> getObjectType() {
return User.class;
} //是否单例
@Override
public boolean isSingleton() {
return true;
} //工厂bean 具体创建具体对象是由此getObject()方法来返回的
@Override
public User getObject() throws Exception {
return new User();
}
}

Junit测试

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {FactoryBeanTest.class})
@WebAppConfiguration
public class SpringBootDemoApplicationTests {
@Autowired
private ApplicationContext applicationContext; @Test
public void tesst() {
FactoryBeanTest bean1 = applicationContext.getBean(FactoryBeanTest.class);
try {
User object = bean1.getObject();
System.out.println(object==object);
System.out.println(object);
} catch (Exception e) {
e.printStackTrace();
}
}
}

结果

true
User [id=null, name=null, age=0]

简单的总结:

BeanFactory是个bean 工厂,是一个工厂类(接口), 它负责生产和管理bean的一个工厂
是ioc 容器最底层的接口,是个ioc容器,是spring用来管理和装配普通bean的ioc容器(这些bean成为普通bean)。
FactoryBean是个bean,在IOC容器的基础上给Bean的实现加上了一个简单工厂模式和装饰模式,是一个可以生产对象和装饰对象的工厂bean,由spring管理后,
生产的对象是由getObject()方法决定的(从容器中获取到的对象不是
“ FactoryBeanTest ” 对象)。

最新文章

  1. AngularJS中的模板安全与作用域绑定
  2. 动手学servlet(六) 过滤器和监听器
  3. 有向图强连通分量的Tarjan算法
  4. &lt;转&gt;详解DNS的常用记录(下):DNS系列之三
  5. JAVA仿真之银行出纳员
  6. CSS3新功能简要
  7. ThinkPHP3.2基础知识(三)
  8. gops —— Go 程序诊断分析工具
  9. Linux安装Apache常见报错(二)
  10. win7 x64 +vs2015 + cmake3.10.3编译opencv-3.4.1+opencv_contrib-3.4.1源码,并进行配置
  11. 20170929 微信小程序项目开发
  12. 【树莓派】【网摘】树莓派与XBMC及Kodi、LibreELEC插件(三)
  13. js 按键
  14. HashTable HashMap HashSet区别(java)
  15. 运用CSS改进网站设计的3个技巧
  16. SublimeText3 插件的使用和本身的配置
  17. 彻底清除Window7下的360注册表
  18. 反射实现增删改查(DAO层)——插入数据
  19. 51nod1228
  20. firebug 扩展介绍和下载

热门文章

  1. Mybatis学习之自定义持久层框架(三) 自定义持久层框架:读取并解析配置文件
  2. phpstudy2018 开启目录浏览
  3. 企业选择CRM系统的要点
  4. 【vue2】(一)基础使用
  5. [bug] Maven:No valid Maven installation found.maven
  6. [Python] Tkinter command
  7. traceroute排查网络故障 www.qq.com排查网络故障网络不通 先ping自己
  8. stress工具使用指南和结果分析(好好好测试通过)
  9. SSH自动断开连接的原因-20200323
  10. mpstat命令