什么是框架?
框架就是一个重复代码的集合。可以使用框架来解决程序中集中、重复和通用的模块代码,提高程序员的开发效率,缩短项目周期。
Spring
Spring是一个轻量级的框架,并且是开源的,主要作用是能够整合现阶段所有的主流框架,负责所有框架的调度和整合,使各个框架之间调用更加流畅、快捷。(粘合剂的作用)
怎么理解轻量级呢?
spring的core不到1MB,占用计算机资源很小;对于容器依赖性小。
Spring IoC
IOC就是控制反转,就是将对象创建的权利交给spring容器来完成。从此程序员无需关注对象的创建过程。spring容器来维护对象的生命周期。
Spring IoC 的实现步骤:
1.导入相关jar包
2.创建实体类
3.编写Spring的配置文件(配置文件头,编写类的对应关系)
4.创建Spring容器
5.从容器中获取对象,对象调用方法,完成相应的功能
Spring 是如何创建对象的呢?
获得class属性的值通过反射调用创建对象。
ClassPathXmlApplicationContext的源码:(看英文注释就OK)
getBean源码:
加载时会将所有单例的bean实例化并且加入到HashMap中,在之后需要单例bean之时直接从hashmap中取,如果hashmap中没有则从spring容器中实例化并且将其放入hashmap,而非单例bean是不会被放入hashmap中,只会从spring容器中加载。
Spring的头文件的生成方式
1.通过拷贝的形式
2.通过约束文件自动生成
约束文件格式
1.schema 有严格的目录结构
2.DTD
导入约束文件:
导入约束的效果 能够实现在没有网的条件下 所有的标签能够自动提示。
通过约束生成头文件:
bean的写法
class类型最好使用自动补齐功能,如果包名过长,手敲可能会出错。
id的写法:首字母小写,其他按照驼峰规则定义。见名知意,通常就写类名。
对象的创建的方式
1.构造方法创建对象–使用频率最高
如果构造方法重载,那么一定要加无参构造,如果没有无参构造,那么默认的对象创建方式必然出错。
2.静态工厂创建对象
最为关键的部分–static
spring的执行过程:
在spring容器启动时,先会加载applicationContext.xml这个配置文件,根据每一个bean创建对象,解析到factory-method属性时,
先到class中找到该方法,之后直接调用执行,执行以后创建出来Calendar对象。
如果没有static关键字,运行不会成功。
3.实例工厂:
实例工厂创建对象,先创建工厂对象,然后调用工厂对象的getCalendar方法,创建Calendar对象交给spring。
4.Spring工厂
当实现FactoryBean接口后,spring容器在启动的时候就会自动的调用getObject()创建对象。
Spring对象的创建过程:
当spring容器启动的时候,先会加载applicationContext.xml,逐行解析,
遇到每一个bean都会为这个bean创建对象,然后存入到map中,直到整个xml配置文件解析完成,spring容器才启动成功,在容器启动完成以后,才能为用户提供服务。
Spring创建对象的单例和多例
默认条件下,Spring创建对象默认都是单例的。
可以通过scope属性来控制对象的单例和多例。让对象创建方式更加灵活
对象的懒加载问题:
关于Spring bean创建的优化,在用户需要调用对象的时候,对象才会被创建出来。
当用户调用getBean()方法时 对象才创建—–理想状态
懒加载的实现:
lazy-init=”default”和默认不写时 懒加载不生效
lazy-init=”false” 懒加载不生效
lazy-init=”true” 懒加载生效
Scope=”prototype” lazy-init=”false”
当对象的创建形式为多例时,所有对象的创建都是懒加载
Spring容器,对于多例对象,只管创建,其他都不管。