1.控制反转IoC
控制反转(Inversion of Control,IoC)是面向对象编程中的一个设计原则,用来降低程序代码之间的耦合度。
在传统面向对象编程中
在传统面向对象编程中,获取对象的方式是用new关键字主动创建一个对象,也就是说调用者掌握着对象的控制权。传统面向对象程序设计原则下图所示。
在使用Spring框架后
在使用Spring框架后,对象的实例不再由调用者来创建,而是由Spring容器来创建。Spring容器会负责控制程序之间的关系,而不是由调用者的代码直接控制。这样,控制权由调用者转移到Spring容器,控制权发生了反转,这就是Spring的控制反转。IoC设计原则下图所示。
2.依赖注入DI
依赖注入概念
依赖注入(Dependency Injection,DI)就是由IoC容器在运行期间动态地将某种依赖资源注入对象之中,是Spring框架核心IoC的具体实现。
依赖注入的作用
依赖注入作用就是在使用Spring框架创建对象时,动态的将其所依赖的对象注入到Bean组件中,其目的是降低系统各层之间的耦合关系。
依赖注入实现方式
依赖注入通常有构造方法注入、setter方法注入等。
- 构造方法注入
构造方法注入是指Spring容器调用构造方法注入被依赖的实例,构造方法可以是有参的或者是无参的。Spring在读取配置信息后,会通过反射方式调用实例的构造方法,如果是有参构造方法,可以在构造方法中传入所需的参数值,最后创建类对象。
- setter方法注入
setter方法注入是Spring最主流的注入方法,这种注入方法简单、直观,它是在被注入的类中声明一个setter方法,通过setter方法的参数注入对应的值。
3.基于xml配置的构造方法注入案例
通过构造方法方式来演示Spring容器在应用中是如何实现依赖注入的,实现Student输出学生姓名和年龄。
案例实现详见链接:案例02 基于xml配置的构造方法注入案例
4.基于xml配置的setter方法注入案例
通过setter方法方式来演示Spring容器在应用中是如何实现依赖注入的,实现StudentService调用StudentDao的saveStudent操作。
案例实现详见链接:案例03 基于xml配置的setter方法注入案例
5.Spring容器API
Spring提供了相应API来管理Bean,在Spring容器的API中,最常用的是BeanFactory和ApplicationContext这两个接口。
BeanFactory接口
BeanFactory是Spring容器最基本的接口,它的实现机制采用的是Java经典的工厂模式。BeanFactory接口提供了创建和管理Bean的方法,BeanFactory接口的常用方法如下表所示。
方法名称 |
描述 |
getBean(String name) |
根据参数名称获取Bean |
getBean(String name,Class type) |
根据参数名称、参数类型获取Bean |
T getBean(Class requiredType) |
根据参数类型获取Bean |
Object getBean(String name,Object... args) |
根据参数名称获取Bean |
isTypeMatch(String name,Resolvable Typetype) |
判断是否有与参数名称、参数类型匹配的Bean |
Class getType(String name) |
根据参数名称获取类型 |
String[] getAliases(String name) |
根据实例的名字获取实例的别名数组 |
boolean containsBean(String name) |
根据Bean的名称判断Spring容器是否含有指定的Bean |
ApplicationContext接口
ApplicationContext接口建立在BeanFactory接口的基础之上,它丰富了BeanFactory接口的特性,例如,添加了对国际化、资源访问、事件传播等方面的支持,ApplicationContext接口的常用实现类如下表所示。
方法名称 |
描述 |
ClassPathXmlApplicationContext |
从类路径加载配置文件,实例化ApplicationContext接口 |
FileSystemXmlApplicationContext |
从文件系统加载配置文件,实例化ApplicationContext接口 |
AnnotationConfigApplicationContext |
从注解中加载配置文件,实例化ApplicationContext接口 |
WebApplicationContext |
在Web应用中使用,从相对于Web根目录的路径中加载配置文件,实例化ApplicationContext接口 |
ConfigurableWebApplicationContext |
扩展了WebApplicationContext类,它可以通过读取XML配置文件的方式实例化WebApplicationContext类 |