spring依赖注入
在没有依赖注入之前,我们想要什么都需要自己主动地去获取
1 | private Car car; |
但是我们真正只是需要调用该依赖对象做某些事情,只要在用的时候,该对象是可以调用的就可以,该对象是主动获取还是别人送过来并没有太大的区别
IOC&&DI
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,用来降低耦合度,IOC(Inversion of Control)目前比较流行的有两种方式:
依赖注入DI(Dependency Injection) 代码中无需给出目标对象的定位路径,只需给定对象名称和类型,系统就会直接去容器中进行查找,spring使用的就是这种形式。对象不是从容器中查找它依赖的类,而是在容器实例化对象的时候主动将它依赖的类注入给它
依赖查找DL(Dependency Lookup) 代码中需要给出目标对象的存放路径,系统会根据路径到容器中查找响应的对象,典型的应用是JNDI
org.springframework.beans.factory.BeanFactory是IOC容器的接口定义,是Spring IOC容器的核心接口
Spring IOC本质是创建类实例的工厂,并且对类实例进行管理,负责创建对象,管理对象,装配对象,配置对象,并且管理这些对象的整个生命周期。
优点:把应用的代码量降到最低。最小代价和最小侵入式使松散耦合得以实现。IOC容器支持加载服务时的饿汉式初始化和懒加载
DI依赖注入是IOC的一个方面,不需要创建对象,只需描述如何被创建,在配置文件中描述组件需要哪些服务,之后IOC容器进行组装
IOC的注入方式:1、构造器依赖注入 2、Setter方法注入 3、属性注入(使用注解标注,通过反射注入到field)
在《spring揭秘》中提到接口注入,实现某个接口,该接口中会声明一个方法,该方法的参数就是所依赖的对象类型,当然这种方式过于繁琐,早就被淘汰了,毕竟是spring2.5
Setter方法注入
通过Setter方法注入bean的属性值或依赖的对象,是最常用的注入方式
1 | <!-- property来配置属性 |
构造器注入
构造器注入需要提供相应的构造器
1 | <!-- 可以使用index来指定参数的顺序,默认是按照先后顺序 --> |
但是如果存在重载的构造器的话,只使用index索引方式无法进行精确匹配,还需要使用类型type来进行区分,index和type可以搭配使用
1 | public Car(String brand, double price) { |
1 | <bean id="car" class="com.zhanghe.study.spring4.beans.beantest.Car"> |