Spring的IOC
发布于 2023-03-05
Spring IOC的介绍
Section titled “Spring IOC的介绍”IOC(inversion of control),就是控制反转的意思。何为控制反转?我们可以根据字面意思理解,就是对于某个东西A,原来的控制权在使用方B,B想用就能用,不想用就不用。现在把控制权交还给了A,只有A给了才能用,这样就是控制反转了。
- 无IOC
class A {}class B {
// B需要将A的实例new出来,也就是我们说的控制 private A a = new A();
public void use() { System.out.print(a); }
}- 有IOC
@Component // 说明A自己控制自己,把自己初始化出来,注入给了容器class A {}
class B {
// B不需要控制a,直接使用。如果A没有把自己注入给容器,B就不能使用 @Resource private A a;
public void use() { System.out.print(a); }
}也就是说,没有Spring的话,我们要使用的对象,需要我们自己创建,而有了Spring的IOC之后,对象由IOC容器创建并管理,我们只需要在想要使用的时候从容器中获取就行了。
IOC的优点
Section titled “IOC的优点”- 使用者不用关心引用bean的实现细节,譬如对于
B b = new A(c,d,e,f);来说,如果B要使用A,那还要把c,d,e,f多个类全都感知一遍,这显然是非常麻烦且不合理的 - 不用创建多个相同的bean导致浪费。
- Bean的修改使用方无需感知。 同样是上面的例子,假如说BeanA需要修改,如果没有IOC的话,所有引用到A的其他bean都需要感知这个逻辑,并且做对应的修改。但是如果使用了IOC,其他bean就完全不用感知到。
Spring的IOC
Section titled “Spring的IOC”对于Spring的IOC来说,它是IOC思想的一种实现方式。在容器启动的时候,它会根据每个bean的要求,将bean注入到SpringContainer中。如果有其他bean需要使用,就直接从容器中获取即可。

IOC是如何实现的
Section titled “IOC是如何实现的”ApplicationContext context= new AnnotationConfigApplicationContext("cn.wxxlamp.spring.ioc");Bean bean = context.getBean(Bean.class);bean.use();- 从配置元数据中获取要DI的业务POJO(这里的配置元数据包括xml,注解,configuration类等)
- 将业务POJO形成BeanDefinition注入到Spring Container中
- 使用方通过ApplicationContext从Spring Container直接获取即可。
发布于 2023-03-05