什么是Spring FactoryBean?有什么作用?
1、什么是Spring
Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IOC和AOP为内核。含有七大核心模块
2、Spring的七大模块
(1)Spring Core:核心容器提供了Spring的基本功能。核心容器的核心功能是用IOC 容器来管理类的依赖关系.Spring采用的模式是调用者不理会被调用者的实例的创建,由Spring容器负责被调用者实例的创建和维护,需要时注入给调用者。这是目前最优秀的解耦模式。
(2)Spring AOP:Spring的AOP模块提供了面向切面编程的支持。SpringAOP采用的是纯Java实现。Spring AOP采用基于代理的AOP实现方案,AOP代理由IOC 容器负责生成、管理,依赖关系也一并由IOC 容器管理,尽管如此,Spring IOC 容器并不依赖于AOP,这样我们可以自由选择是否使用AOP。
(3)Spring ORM:提供了与多个第三方持久层框架的良好整合
(4)Spring DAO: Spring进一步简化DAO开发步骤,能以一致的方式使用数据库访问技术,用统一的方式调用事务管理,避免具体的实现侵入业务逻辑层的代码中
(5)Spring Context:它是一个配置文件,为Spring提供上下文信息,提供了框架式的对象访问方法。Context为Spring提供了一些服务支持,如对国际化(i18n)、电子邮件、校验和调度功能。
(6)Spring Web:提供了基础的针对Web开发的集成特性,例如多方文件上传,利用Servlet listeners进行IoC容器初始化和针对Web的applicationContext.
(7)Spring MVC:提供了Web应用的MVC实现。Spring的MVC框架并不是仅仅提供一种传统的实现,它提供了一种清晰的分离模型,在领域模型代码和web form之间。并且,还可以借助Spring框架的其他特性
3、什么是Spring FactoryBean?
spring中有两种Bean:普通Bean和工厂Bean
spring提供了一个FactoryBean的工厂类接口,可以通过实现接口来实例化Bean
FactoryBean接口中有三个方法
①getObject 获取对象
②getObjectType 获取对象类型
③isSingleton 是否单例
4、Spring中bean的配置方式
1.xml文件中bean标签配置
2.配置类(springboot支持)
3.注解的方式
4.properties方式
5、FactoryBean和BeanFactory的区别
- BeanFactory是一个工厂,也就是一个容器,是来管理和生产bean的;
- FactoryBean是一个bean,但是它是一个特殊的bean,所以也是由BeanFactory来管理的,它是一个接口,他必须被一个bean去实现,不过FactoryBean不是一个普通的Bean,它会表现出工厂模式的样子,是一个能产生或者修饰对象生成的工厂Bean
6、SpringBean的生命周期
- 首先应该定义Bean,定义Bean的常用方式有三种,(xml,注解,properties)
- 定义后通过实现BeanDefinitionReader接口来读取Bean的定义
- 在读取完bean的定义后通过实现BeanFactoryPostProcessor接口对Bean进行增强处理
- 然后通过反射的方式创建Bean
- 在对Bean进行初始化操作,通过执行set方法对属性赋值
- 在属性初始化后执行BeanPostProcessorBefore也就是Bean的前置增强处理
- 前置处理增强后调用Bean的init方法初始化
- 初始化后的执行BeanPostProcessorAfter也就是Bean的后置处理
- 后置处理后就是完整的Bean
7、Bean Factory和 Application contexts 有什么区别?
-
BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。其中ApplicationContext是BeanFactory的子接口。
-
BeanFactory:是Spring里面最顶层的接口,包含了各种Bean的定义,读取bean配置文档,管理bean的加载、实例化,控制bean的生命周期,维护bean之间的依赖关系。BeanFactory 简单粗暴,可以理解为就是个 HashMap,Key 是 BeanName,Value 是 Bean 实例。通常只提供注册(put),获取(get)这两个功能。我们可以称之为 “低级容器”。
-
ApplicationContext 可以称之为 “高级容器”。因为他比 BeanFactory 多了更多的功能。他继承了多个接口。因此具备了更多的功能。例如资源的获取,支持多种消息(例如 JSP tag 的支持),对 BeanFactory 多了工具级别的支持等待,该接口定义了一个 refresh 方法,用于刷新整个容器,即重新加载/刷新所有的 bean。
源码下载:https://gitee.com/charlinchenlin/koo-erp