1.spring 框架
1.1 简介
框架(Framework):一系列的jar包,同时约定了实现某个功能的编程方式,可能与原有的编程方式并不相同!每个框架都解决了某些特定的问题!
- Spring框架解决的问题:解决了创建和管理对象的问题,实现了解耦!
- 解耦:解除对象的之间的耦合!即降低对象之间的依赖关系!
- 依赖:在一个对象的工作过程中,需要使用到另一个对象,则称之为依赖另一个对象!
//原始创建对象方式:user具体的实现类发生改变,new的方式也得改变,耦合性太高
User user = new UserImpl();
//spring方式:
@Autowared
User user;
- 如果只是使用Spring框架的内容,添加
spring-context
依赖即可,并不需要spring-webmvc
,在SpringMVC框架,在spring-webmvc
中包含了spring-context
,所以,也可以直接使用spring-webmvc
依赖。
1.2 特性
1.2.1. 什么是IoC
Spring IoC表示控制反转,即在传统模式下,是由程序员编写代码创建并管理对象,例如User user = new User();
,当使用Spring框架之后,则将对象的创建、管理的“权力”交给了框架,则表示控制权是给了框架,所以,称之为控制反转!
Spring框架是通过DI(做法、手段)实现了IoC(效果、目标),DI(Dependency Injection)表示依赖注入。
1.2.2 什么是依赖注入
- 在对象的运行过程中,需要使用另一个对象,在编写代码时,在一个类中需要声明另一个类的对象,则表现出了依赖关系!
- 使用Spring框架,不仅可以管理某个类的对象,还可以在创建对象的同时,为该类中声明的属性进行赋值,这种赋值操作就称之为注入。
- 可以通过set和构造方法赋值
1.2.3 什么是AOP
1.AOP:面向切面编程,是面向对象编程的重要组成部分.在不改变业务逻辑的基础上,对 横切逻辑 进行扩展.
2.应用场景:
性能测试
权限管理
日志管理
事务管理
1.3 对象生命周期
1.3.1 Java Bean
类的定义,符合如下规则的Java对象称为Java Bean
- 必须有包
- 必须有无参数构造器
- 必须实现 序列化接口
- 有getXXX setXXX 方法声明的"Bean属性".
- Bean属性 不是 对象属性
- boolean类型的 get属性方法,可以声明为 isXXX
Java Bean就是符合一定规范的Java对象!
1.3.2 Bean 的生命周期管理
Spring 中的Bean对象, 由Spring控制对象的创建和销毁, 这个过程称为Spring中Bean对象的生命周期管理.
-
单例对象 singleton(单例)
- 创建: 在Spring容器初始化时候, 创建单例对象, 如果设置了init-method属性, 则在创建对象以后调用初始化方法.
- 使用: 每次调用getBean时候, 返回的都是同一个对象
- 销毁: 在Spring容器关闭时候,Spring会自动销毁单例对象, 如果指定了destroy-method属性, 则会在销毁之前执行 销毁 方法.
-
多例对象 prototype(原型)
- 创建: 在调用getBean方法时候, 创建对象, 如果设置了init-method属性, 则在创建对象以后调用初始化方法.
- 使用: 每次调用getBean时候, 返回的都是新对象
- 销毁: Spring 不管!!! 也不会调用 destroy-method !!!
1.3.3 Bean 生命周期与延迟实例化
问题:
单例对象默认情况下在容器启动时立即初始化, 如果这些对象内存耗用高, 则启动会很慢.
解决办法:
对于内存占用高, 使用少的对象, 可以设置延迟(懒惰,按需)实例化,
在bean标签上使用懒惰属性设置即可.
设置了懒惰属性为true:
- 容器启动时候, bean不实例化
- 在第一个次getBean时候实例化
- 是单例bean对象.
多例对象没有延迟初始化问题.