网站建设杭州,asp.net 网站写好后如何运行,深圳50强外贸公司排名,营销型网站建设的利与弊介绍一下Spring的IOC ✔️引言✔️ lOC的优点✔️Spring的IOC✔️ 拓展知识仓✔️IOC是如何实现的#xff1f; ✔️引言 所谓的IOC (inversion of control) #xff0c;就是控制反转的意思。何为控制反转? 在传统的程序设计中#xff0c;应用程序代码通常控制着对象的创建和… 介绍一下Spring的IOC ✔️引言✔️ lOC的优点✔️Spring的IOC✔️ 拓展知识仓✔️IOC是如何实现的 ✔️引言 所谓的IOC (inversion of control) 就是控制反转的意思。何为控制反转? 在传统的程序设计中应用程序代码通常控制着对象的创建和管理。例如一个对象需要依赖其他对象那么它会直接new出来对象。这样的设计通常被称为 “控制流程” 。 而在IOC 中控制关系发生了反转。控制权被转移到Spring容器中容器负责创建和管理对象并在需要的时候将它们注入到应用程序中。 所以原来这个对象的控制权在我们的代码中我们自己new的对象在Spring中应用程序不再控制对象的创建而是被动地接受由容器注入的对象。 我们拿代码来举个例了: 下面是一个没有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就不能使用Resourceprivate A a;public void use() {System.out .print(a);}
} 也就是说没有Spring的话我们要使用的对象需要我们自己创建而有了Spring的IOC之后对象由IOC容器创建并管理我们只需要在想要使用的时候从容器中获取就行了。 值得说明的是IOC只是一种思想和理念可以有不同的实现方式。 ✔️ lOC的优点 使用IOC有最少三个好处 1 . 使用者不用关心引用bean的实现细节警如对于 B b new A(c,d,e,f);来说如果B要使用A那还要把cdef多个类全都感知一遍这显然是非常麻烦且不合理的 2 . 不用创建多个相同的bean导致浪费仍然是
A b new A();
A z new A();如果B和Z都引用了A那么B和Z就可能new 两个A实例实际上我们只需要一个就好了。 3 . Bean的修改使用方无需感知。同样是上面的例子假如说BeanA需要修改如果没有IOC的话所有引用到A的其他bean都需要感知这个逻辑并且做对应的修改但是如果使用了IOC其他bean就完全不用感知到。 ✔️Spring的IOC 对于Spring的IOC来说它是IOC思想的一种实现方式。在容器启动的时候它会根据每个bean的要求将bean注入到SpringContainer中。如果有其他bean需要使用就直接从容器中获取即可如下图所示: ✔️ 拓展知识仓 ✔️IOC是如何实现的 使用Spring的IOC容器能力非常简单如下代码所示: ApplicationContext context new AnnotationConfigApplicationContext(cn.wxxlamp.spring.ioc);
Bean bean context.getBean(Bean.class) ;
bean . use() ;从上面的代码中我们也能看出来Spring的IOC是如何实现的: 1 . 从配置元数据中获取要DI的业务POJO (这里的配置元数据包括xml注解configuration类等) 2 . 将业务POJO形成BeanDefinition注入到Spring Container中 3 . 使用方通过ApplicationContext从Spring Container直接获取即可。如下图所示: