1 SpringFramework
spring
rod johnson
the source of modern java
2 IOC
Inverse of control
UserService userService = new UserServiceImpl(); //应用程序生成的实例 → 控制
控制:实例的生成权
反转:原先是应用程序 → 反转给Spring容器(IOC容器)
容器:生成并管理实例的地方
3 DI
ioc的基础上
Spring容器和应用程序 →
谁富有,谁贫穷 → 劫富济贫
Dependency Injection:依赖注入
依赖:谁依赖谁,为什么
注入:谁注入谁,注入了什么
他能够提供什么样的功能
l 方便解耦,简化开发(高内聚低耦合)
l AOP编程的支持
l 声明式 事务的支持
l 方便程序的测试
l 方便集成各种优秀框架
l 降低JavaEE API的使用难度
依赖注入、事件、资源、i18n国际化、校验、数据绑定、类型转换、Spring Expression Language、AOP
4 入门案例1
开始使用Spring容器,生成并管理实例
4.1 引入spring依赖
5
spring-core
*s**pring-context***
spring-bean
spring-aop
spring-expression
1
jcl
4.2 创建spring容器 →spring配置文件
xml格式 → schema
配置文件的名称:application**(-xxx).xml
1、 复制已有schema
2、 spring官网
3、 文件模板
4.3 配置文件中管理实例
userServiceImpl的实例交给spring容器
组件:Spring容器管理的实例
注册:管理
4.4 从容器中取出userService组件,并测试sayHello方法
4.5 取出容器中组件的不同方式
5 入门案例2
维护容器中的组件之间的关系
5.1 通过property标签建立组件之间的依赖关系
name属性对应set方法
5.2 单元测试
从容器中取出的userService中的userMapper和直接从容器中取出的userMapper是同一个组件
6 接口
容器接口
6.1 BeanFactory
6.2 ApplicationContext
ClasspathXmlApplicationContext
FileSystemXmlApplicationContext
AnnotationConfigApplicationContext
WebApplicationContext
7 bean的实例化
控制反转:实例的生成权交给了spring容器
7.1 构造方法
7.1.1 无参构造(最常用)
默认使用的方式就是无参构造
7.1.2 有参构造
7.2 工厂
工厂中的生产方法是否为静态方法
7.2.1 静态工厂
7.2.2 实例工厂
需要先提供一个工厂组件
7.2.3 FactoryBean
BeanFactory和FactoryBean之间的区别
BeanFactory:生产全部组件
XXXFactoryBean 生产特定的xxx组件的
FactoryBean接口中提供了一个方法 getObject(注册的组件类型和该方法的返回值相关)
8 作用域scope(默认不写是singleton)
singleton:组件在容器中以单例的形式存在
prototype: 原型,每一次获得组件的时候都去获得一个新的
9 生命周期
容器中的组件的生命周期:我们要去使用组件,要经过哪一些过程
9.1 cope对生命周期的影响
scope会影响组件到达可用状态之前的这些生命周期的执行(*影响执行开始的时间*)
singleton:容器初始化的时候(调用getBean方法之间已经执行完了)
prototype:当调用getBean(获得组件时),才开始执行生命周期
9.2 完整流程图
9.3 代码
9.3.1 给组件提供生命周期
9.3.2 自定义BeanPostProcessor
10 注解(重中之重)
10.1 组件注册功能注解
bean标签 → class属性
注解:类上
@Component
10.1.1 组件id
10.1.2 其他注解
@Service :service层的组件
@Repository:dao层的组件
@Controller:controller层的组件(SpringMVC阶段才去使用)
10.2 组件注入
@Autowired:按照类型来进行注入
@Autowired + @Qualifier
@Resource
要求在容器中的组件里使用这些注入功能的注解
10.3 生命周期和scope
init-method:@PostConstruct
destroy-method:@PreDestroy
将注解写在方法上
@Scope :将作用域的值写在注解中
10.4 Spring单元测试
测试容器中的组件提供的方法
可以在单元测试类中使用注入功能的注解