控制反转:
没有引入IOC容器之前,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候, 自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。
引入IOC容器之后,对象A与对象B之间失去了直接联系,当对象A运行到需要对象B的时候,I0C容器会主动创建一个对象B注入到对象A需要的地方。
对象的控制权全部交给了IOC容器,IOC容器成了整个系统的关键核心。
DI注入的方式
1.构造方法注入
被注入对象可以在它的构造方法中声明依赖对象的参数列表,然后,loC容器会检查它的构造方法,取得它所需要的依赖对象列表,进而为其注入相应的对象。
- setter方法注入
当前对象只要为其依赖对象所对应的属性添加setter方法,让IOC容器调用注入所依赖类型的对象
3.接口注入
实现特定接口,以供IOC容器为其注入依赖对象。
4.基于注解
利用java的注解机制,如autowired
依赖倒置原则:高层模块不应依赖低层模块,两者都应依赖其抽象
IOC容器
spring启动时读取应用程序提供的bean配置信息,并在容器中声明一份相应的bean注册表,根据这张注册表实例化bean,装配好bean之间的依赖关系,为上层提供准备就绪的运行环境。spring提供一个配置文件描述bean和bean之间的依赖关系,利用java语言的反射功能实例化bean,并建立bean之间的依赖关系
Spring容器的两种类型:
BeanFactory
BeanFactory是类的通用工厂,它可以创建并管理各种类的对象。
➢提供IOC的配置机制
➢包含Bean的各种定义,便于实例化Bean
➢建立Bean之间的依赖关系
➢Bean生命周期的控制
ApplicationContext的功能(继承多个接口)
➢BeanFactory :能够管理、装配Bean
➢ResourcePatternResolver :能够加载资源文件
➢MessageSource :能够实现国际化等功能
➢ApplicationEventPublisher :能够注册监听器,实现监听机制
区别*