19.依赖注入
- 把有依赖关系的类放到容器中,解析出这些类的实例,就是依赖注入。目的是实现类的解耦
- 例:Class A中用到了Class B的对象b,一般情况下,需要在A的代码中显式的new一个B的对象。采用依赖注入技术之后,A的代码只需要定义一个私有的B对象,不需要直接new来获得这个对象,而是通过相关的容器控制程序来将B对象在外部new出来并注入到A类里的引用中。
20.依赖注入分类
-
基于构造函数的依赖注入
-
构造函数的参数是依赖项
-
在配置文件给构造函数指定参数
-
<bean name="" class=""> <constructer-arg ref="teacher"/> </bean>
-
-
基于设置函数的依赖注入
-
设置函数就是get和set
-
在配置文件给当前bean指定属性参数
-
<bean name="" class=""> <property name="" value=""></property> </bean>
-
-
基于自动装配的依赖注入
- Spring的自动装配有三种模式:byType(类型模式),byName(名称模式)、constructor(构造函数模式)。
- byType模式:它会根据参数类型在Spring容器中查找与参数类型相同的被依赖Bean对象
- byName模式中:Spring IOC容器会根据定义Bean类的属性名称,在Spring容器中查找与Bean类属性名称相同的其它Bean名称进行匹配
- constructor(构造函数模式)适用于构造函数参数类型,Spring IOC容器会根据定义Bean类的构造函数给出的参数类型
-
基于注解的依赖注入
-
使用注解前必须在Spring配置文件中注册注解驱动 <context:annotation-config/>,
-
@Autowired 注解,可以对Bean类成员变量、方法及构造函数进行标注,完成依赖注入的自动装配工作。使用@Autowired可以省略Bean类的待依赖注入对象的set方法
-
@Autowired默认情况下按照依赖注入对象的类型自动进行匹配。加入@Autowired注解的方式是在Bean类依赖注入对象的前面加上@Autowired语句。
-
teacher为待注入对象
-
@Autowired private Teacher teacher;
-
<bean name="teacher" class="..."> <property name="..." value="..."></property> </bean>
-
@Resource注解的功能和@Autowired注解功能相近,@Resource有name和type两个主要的属性。Spring容器对于@Resource注解的name属性解析为bean的名字,type属性则解析为bean的类型
-