Spring的 ioc 和 di的简介
1,反转控制IOC (Inversion Of Control)的缩写,即创建对象的反转控制。:把对象的创建权限交给Spring容器,让spring帮我们实例化对象,我们只是从spring容器中取得实例
反转控制IOC (Inversion Of Control)的缩写,即创建对象的反转控制。:
把对象的创建权限交给Spring容器,让spring帮我们实例化对象,我们只是从spring容器中取得实例
例:
以前我们要自己new对象,现在spring帮我们new对象,以后我们需要对象,就找spring要
以前:做鞋子–手工作坊 (自己new对象)
1、效率低
2 、每个细节都要关注
3、成本高----人力 ,时间
现代:工厂 (spring bean工厂—new对象)
1、效率高
2、不需要关注每个细节,机器
3、成本低
2、依赖注入DI(Dependency Injection )的缩写:依赖了spring容器注入的那个对象(在spring配置文件中,将其中一个bean依赖注入到另一个bean中)。
1,首先,DI的方式一般有三种:
1,构造器依赖注入:
构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。【在构造方法的入参中设置需要注入的对象】
2,构造器的注入:
使用方式: 在构造方法中声明需要注入的对象,构造方法的参数列表就是需要注入的对象列表。
优点: 对象在构造完成即进入就绪状态。
缺点: 当依赖对象比较多时,构造方法的参数列表会比较长,不好维护。
例子:
1)根据参数名进行注入
2)根据参数下标进行注入
2,Setter方法注入:
Setter方法注入是容器通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。
使用方式: 在类中增加需要被注入对象的getter/setter方法。
优点: 使用起来更宽松,需要什么对象就调用其对应的setter方法。
缺点: 构造完成后不能立即使用,需要先调用依赖对象的setter方法进行依赖注入。
例子:
1)当参数为普通类型时直接可以引用:
2)当参数为引用类型时:
3)当参数为数组时:
4)当参数为集合时:
5)当参数为map时:
3,接口注入:
需要实现某一个用于注入对象的接口,该接口定义有注入对象的方法,方法参数就是需要被注入的对象。
PS:接口注入的方式比较繁琐且侵入性强【需要实现一些不必要的接口】,用得很少,了解就好。