Spring Framework系统架构
1.Spring核心概念
代码书写现状
耦合度偏高
解决方案
使用对象时,在程序中不要主动使用new产生对象,转换为外部提供对象
IOC(Inversion of Control)控制反转
对象的创建控制权由程序移到外部,这种思想称为控制反转
解耦
Sping技术对Ioc思想进行了实现
Spring提供了一个容器,称为IOC容器用来充当IOC思想中的“外部”
IOC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IOc容器中同称Bean
DI(Dependency Injection)依赖注入
在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入
目标:充分解藕
使用IOC容器管理bean(IOC )
在ioc容器内将有依赖关系的bean进行关系绑定
最终效果:
使用对象时不仅可以直接从IOC容器中获取,并且获取到的bean已经绑定了所有的依赖关系
IOC入门案例思路分析
- 管理什么?(Service与Dao)
- 如何被管理的对象告知IOC容器(配置)
- 被管理的对象交给IOC容器,如何获取IOC容器?接口
- IOC容器得到后,如何从容器中获取bean?(接口方法)
- 使用Spring导入那些坐标?(pom.xml)
2.bean的配置
bean基础配置
bean别名配置
bean作用范围配置
为什么bean默认为单例?
适合交给容器进行管理的bean
表现层对象
业务层对象
数据层对象
工具对象
不适合交给容器进行管理的bean
封装实体的域对象
3.bean实例化
bean是如何创建的,实例化bean的三种方式
第一种:bean本质上就是对象,创建bean使用构造方法完成
第二种:使用静态工厂
第三种 实例工厂实例化bean
第四种 使用FactoryBean实例化Bean(第三种方法的变种)
Public clas UserDaoFactoryBean implements FactortyBean<UserDao>{
public UserDao getObject() throws Exception{
return new UserDaoImpl(); //获得bean的实例的
}
public Class<?>getObjectType(){
return UserDao.class;//获得bean 的类型的
}
public boolean isSingleton(){
return false;//true 返回的是单例对象,false返回的不是单例对象
}
}
4.bean的生命周期
生命周期:从创建到消亡的完整过程
bean生命周期Lbean从创建到销毁的整体过程
bean 生命周期控制:在bean创建后到销毁前做一些事情
初始化容器
1.创建对象(内存分配)
2.执行构造方法
3.执行属性注入(set操作)
4.执行bean初始化方法
使用bean
1.执行业务操作
关闭/销毁容器
1.执行bean销毁方法
5.setter注入(依赖注入)
向一个类中传递数据的方法有几种
普通方法(set)
构造方法
思考:依赖注入描述了在容器中建立bean与bean之间依赖关系的过程,如果bean运行需要的是数字或字符串呢?
引用类型
简单类型(基本数据类型与String)
依赖注入方式
setter注入
简单类型
引用类型
构造器注入
简单类型
引用类型
依赖注入方式选择
1.强制依赖使用构造器进行,setter注入有概率不进行注入导致null对象出现
2.可选依赖使用setter注入进行,灵活性强
3.Spring框架倡导使用构造器,第三方框架内部大多数采用构造器注入的形式数据初始化,相对严谨
4.如果有必要可以两者同时使用,使用构造器注入完成强制依赖,使用setter注入完成可选依赖的注入
5.实际开u发过程中还要根据实际情况分析,如果受控对象没有提供setter方法就必须使用构造器注入
6.自己开发的模块推荐使用setter注入
6.自动装配
Ioc容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配
自动装配方式
按类型(常用)
按名称
按构造方法
不启用自动装配
自动装配用于引用类型依赖注入,不能对简单类型进行操作
只有按类型装配时(byType)必须保障容器中相同类型的bean唯一,推荐使用
使用按名称装配时(byName)必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐使用
自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效
7.集合注入
引用类型
8.核心容器总结‘
BeanFactory是IOC容器的顶层接口,初始化BeanFactory对象时,加载的bean延迟加载
ApplicationContext接口时Spring容器的核心接口,初始化时bean立即加载
ApplicationContext接口时提供基础的bean’操作相关方法,通过其他接口扩展其功能
ApplicationContext接口常用初始化类
ClassPathXmlApplicationContext
FileSystemXmlApplicationContext
延迟加载
ApplicationContext接口时Spring容器的核心接口,初始化时bean立即加载
ApplicationContext接口时提供基础的bean’操作相关方法,通过其他接口扩展其功能
ApplicationContext接口常用初始化类
ClassPathXmlApplicationContext
FileSystemXmlApplicationContext