关于Spring的IOC浅析

关于Spring 中的IOC和DI的一些个人理解和一个小Demo

【IOC是什么?】

IOC—Inversion Of Control,即“控制反转”,不是什么技术,而是一种设计思想。

在Java开发中,IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。

IOC很好的体现了面向对象设计法则之一[好莱坞法则]:“别找我们,我们找你”;

即由IOC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。

【IOC原理】:

[XML配置文件+工厂模式+反射]
创建对象的权利交给Spring来管理,来实现控制反转(将创建对象的权利交给spring来管理)

当我们需要使用到某个对象的时候,通过读取配置文件,根据id拿到映射的权限类名,再通过反射,产生一个该类的实例。

在使用的时候,我们只需要通过声明它们的[父接口],通过id获取到反射生成的实例,通过setter给注入[实现类]。这样就解

开了耦合,方便切换底层实现类。

【什么是DI?】

DI:dependency injection 依赖注入

在 spring 框架负责创建 Bean 对象时,动态将依赖对象注入到 Bean 组件。

最后

如果是jar项目

则通过ClassPathXmlApplicationContext这个对象,通过构造器指定读取配置文件位置,产生一个

ApplicationContext对象,然后通过该对象的getBean方法,传入id,这样就可以获取到我们需要的bean了;

如果是war项目

则通过配置[web.xml] 文件,即是,服务器一加载,就会将我们的配置文件读取到内存中,通过配置一个监听器监听

程序中是否注入、注入了哪个bean,最后同样是根据id将反射生成的实例注入给该声明的对象。

【IOC 和 DI 区别?】

IOC是将创建对象的权利交给spring管理。

DI是在spring创建对象的过程中,将该对象需要的属性通过配置中的<properties>标签注入给该对象

简单的说:

它们就是一个负责创建对象,一个负责给对象注入属性。

好了,直接上干货:

这两个类作为IOCDemo的属性,通过<properties>标签,注入到IOCDemo 的组件中

 

 

下面重点来了, 在我们的测试类中,通过创建了ApplicationContext的子类ClassPathXmlApplicationContext,传入读取配置文件的路径,获得了一个上下文对象。  调用getBean()方法,通过配置文件中指定的id,这样就获得到了我们需要的Bean

再补上一记配置文件

输出结果为:

 

各位高人手下留情。。。不对之处还望指点

发表评论

电子邮件地址不会被公开。