1.什么是IoC
简单来说,IoC是控制反转,类似于好莱坞原则,主要有依赖查找和依赖注入实现。
Hollywood principle:"Don't call me; I'll call you."
更多哈莱坞原则参考 什么是好莱坞原则
2.什么是Spring IoC 容器?
IOC容器就是具有依赖查找、依赖注入功能的容器,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。
3. 依赖查找和依赖注入的区别?
简单来说,
- 依赖查找是主动和手动的依赖查找方式,通常需要依赖容器和标准api去实现;
- 而依赖注入则是手动或自动依赖绑定的方式,无需依赖特定的容器和api。
4. Spring作为IoC容器有什么优势?
Spring 优势有
- 典型的 IoC 管理,依赖查找和依赖注入
- AOP 抽象
- 事务抽象
- 事件机制
- SPI 扩展
- 强大的第三方整合
- 易测试性
- 更好的面向对象
4. BeanFactory 与 FactoryBean
BeanFactory 是IoC的底层容器。 FactoryBean是创建Bean的一种方式,帮助实现复杂的初始化逻辑。
public interface FactoryBean<T> {
//从工厂中获取bean
@Nullable
T getObject() throws Exception;
//获取Bean工厂创建的对象的类型
@Nullable
Class<?> getObjectType();
//Bean工厂创建的对象是否是单例模式
default boolean isSingleton() {
return true;
}
}
- 他们两个都是工厂,都是接口,但
FactoryBean本质上还是一个Bean,也归BeanFactory管理 BeanFactory是Spring容器的顶层接口,FactoryBean更类似于用户自定义的工厂接口。
FactoryBean使用场景
说了这么多,为什么要有FactoryBean这个东西呢,有什么具体的作用吗?
FactoryBean在Spring中最为典型的一个应用就是用来创建AOP的代理对象。
我们知道AOP实际上是Spring在运行时创建了一个代理对象,也就是说这个对象,是我们在运行时创建的,而不是一开始就定义好的,这很符合工厂方法模式。更形象地说,AOP代理对象通过Java的反射机制,在运行时创建了一个代理对象,在代理对象的目标方法中根据业务要求织入了相应的方法。这个对象在Spring中就是——ProxyFactoryBean。
所以,FactoryBean为我们实例化Bean提供了一个更为灵活的方式,我们可以通过FactoryBean创建出更为复杂的Bean实例。