(1)总体分为启动、运行、结束。
主要在org.springframework.context.support.AbstractApplicationContext中的refresh()方法:
(2)BeanFactory和FactoryBean的区别?
BeanFactory是IoC底层容器。
FactoryBean是创建Bean的一种方式,帮助实现复杂的初始化逻辑
org.springframework.beans.factory.FactoryBean
getObject()方法会被容器调用,但是容器怎么知道此方法会被调用呢?由getObjectType()方法来决定,如果对象的类型是相同的,那么通过isSingleton()方法是否是单例来进行区分,但是isSingleton()方法并不是每次都会调用。
(3)Spring IoC容器启动时做了哪些准备?
IoC配置元信息读取和解析、IoC容器生命周期、Spring事件发布、国际化等。
(4)@Bean注解和FactoryBean的区别
对于我们使用创建复杂的bean来说,是不是用@Bean这个注解就可以完全代替FactoryBean呢,是不是FactoryBean的用意本身只是更好的去帮助Spring的一些内键Bean,而不是对我们用来扩展的,如果用来扩展Bean的话,@Bean是不是更方便 简洁一些?
@Bean 确实可以做到,不过 FactoryBean 很早的接口,当时还不支持 Annotation。
可以参考 MyBatis-Spring 的 org.mybatis.spring.mapper.MapperFactoryBean 这个 FactoryBean 类,为 Mapper 接口返回对应的动态代理对象,从而调用该接口的方法时能够进行数据库相关操作。
还有一种情况啊, 动态的生成代理对象,这时@Bean 就做不到了,像FactoryBean 在一些基于spring开发的框架上,使用的特别多, 比如feign mybatis等等都是基于factorybean来动态生成代理对象的。