控制反转,是一种设计思想,而依赖注入(DI)是一种实现的方法。原本对象需要由程序员自己new,(这样确实可以,但是有个问题就是每次更改操作都需要修改源码,这是大忌),现在交给Spring容器帮我们创建并管理。
依赖注入(DI),将Spring容器中new出来的对象通过set方法(自动补全)赋值给studentService,这个过程叫依赖注入:DI
依赖注入的四种形式:
1.Set方式注入
setter是Spring现在最流行的注入方式,它可以利用Java Bean规范所定义的set/get方法来完成注入,它不需要使用构造器注入时出现的多个参数,它可以把构造方法声明成无参构造,再使用setter注入设置相对应的值,其实也是通过java反射技术去实现的。
package com.callen.spring.pojo;
public class Student {
private Integer id;
private String name;
private Integer age;
private String gender;
private Banji banji;
//getter/setter方法和构造器省略...
}
xml文件配置:
2.构造器注入
构造器注入主要是依赖于构造方法去实现,构造方法可以是有参也可以是无参,我们在平常都是通过类的构造方法来创建类对象,以及给他赋值,同样Spring 也可以采用反射的方式,通过构造方法来完成注入(赋值)。
xml文件配置:
3.注解方式
3.1:
@Autowired默认按类型装配
@Qualifier和Autowired配合使用,指定bean的名称
@Resource默认按名称装配,当找不到与名称匹配的bean时,才会按类型装配。
3.2 这里再谈一下@Qualifier这个注解:
@Qualifier和Autowired配合使用,指定bean的名称,针对一个包下有多个子类的情况:
目的是让Controller层指定确定要注入哪个类
@Qualifier(value = "courseService2")
@Autowired
private ICourseService courseService;
//此时注入的就是CourseSercice2这个类。
4.接口注入(已废弃)
不做介绍,知道即可(本人也没了解,都废弃了知道了也没用)