文章目录
- 一.核心概念
- IoC/DI思想2.Ioc容器3.Bean
- 二.IoC入门案例
- 三.DI入门案例分析
- 四.bean基础配置
- 五.bean的实例化(创建)
- 六.bean实例化——静态工厂
- 七.bean实例化——示例工程与FactoryBean
- 八.bean的生命周期
- 九.依赖注入的两种方式
- 十.构造器注入
- 十一.依赖自动装配
- 十二.集合注入
- 十三.案例:数据源对象管理
- 十三.加载properties文件
- 十四.容器
- 十五.核心容器总结
- 十六.注解开发
- 十七.纯注解开发
- 十八.bean的管理
- 十九.依赖注入
- 二十.第三方bean管理
- 二十一.第三方bean依赖注入
- 二十二.注解开发总结
- 二十三.Spring整合MyBatis
- 二十四.Spring整合JUnit
- 二十五.AOP简介
- 二十六.AOP的入门案例
- 二十七.AOP工作流程
- 二十八.AOP切入点表达式
- 二十九.AOP通知类型
- 三十.AOP总结
- 三十一.SpringMVC简介
- 三十二.SpringMVC入门案例
- 三十三.入门案例工作流程
- 三十四.bean加载控制
- 三十五.PostMan工具介绍
- 三十六.设置请求映射路径
- 三十七.get请求和post请求发送普通参数
- 三十八.5种类型参数传递
- 三十九.json数据传递参数
一.核心概念
IoC/DI思想2.Ioc容器3.Bean
- 代码书写现状
若数据层实现想换一套
需要换BookDaoImpl,但一换有成本。
-
由于在类里面写了其他的实现,导致代码耦合度偏高,需要低耦合,直接不写,就没有太高耦合度,只剩接口,但是程序不能运行,直接给对象
-
解决:使用对象时,在程序中不要主动使用new产生对象,转换由外部提供对象
-
IoC(Inversion of Control)控制反转
-
对象的创建控制权由程序转移到外部,这种思想为控制反转
-
只为解耦
-
Spring技术对IoC思想进行了实现
-
Spring提供了一个容器,成为IoC容器,用来充当IoC思想中的“外部”。
-
IoC容器负责对象的创建,被创建或被管理的对象在IoC容器中统称为Bean
- DI(Dependency Injection)依赖注入
- 目标:充分解耦
- 使用IoC容器管理Bean
- 在IoC容器内将有依赖关系的Bean进行关系绑定(DI)
- 最终效果
- 使用对象时不仅可以直接从IoC容器中获取,并且获取到的Bean已经绑定了所有的依赖关系
二.IoC入门案例
- 管理什么?(Serivice与Dao)
- 如何将被管理的对象告知IoC容器?(配置)
- 被管理的对象交给IoC容器,如何获取到IoC容器?(接口)
- IoC容器得到后,如何从容器中获取bean?(接口方法)
- 用Spring导入那些坐标?(pom,xml)
要交给他管理要先写一个配置文件
三.DI入门案例分析
- 基于IoC管理Bean
- Service中用new形式创建的Dao对象是否保留?否
- Service中需要的Dao对象如何进入到Service中?提供方法
- Seivice与Dao的关系如何描述?配置
四.bean基础配置
bean的别名
bean作用范围配置
五.bean的实例化(创建)
bean本质:对象,创建bean使用构造方法完成
无参
六.bean实例化——静态工厂
七.bean实例化——示例工程与FactoryBean
单例
造出非单例对象
八.bean的生命周期
- 生命周期:从创建到消亡的过程
- bean生命周期:bean从创建到销毁的整体过程
- bean生命周期控制:在bean创建后到销毁前做的一些事情
现在运行的是dao,也就是说虽然配置的里面有service,dao,但是运行的时候拿的只是dao,service现在并没参与程序运行
控制dao的生命周期
- bean创建后
- bean消亡前
java">public class BookDaoImpl impkents BookDao{public void init (){//bean初始化对应的操作System.out.println("init...");}public void destory(){//bean销毁前的操作System.out.println("destory...");}
要在配置文件resources中提前做配置applicationContext.xtml
java"><bean id="bookDao" calss="com.ithema.dao.impl.BookDaoImpl" init-method="init" destory-method="destory"/>
destory为什么没有执行?
程序运行在java虚拟机中,把bean初始化后程序运行完虚拟机退出
如何做到?
- 在虚拟机退出前把容器关闭
java">//service(AppForLiftCycle.java)
public class AppForLifeCycle{public ststic void main(String [] args){ClassPathXtmlApplicationContext ctx=new ClassPathXmlApplicationContext("application.xml); //ApplicationContect ctx=new ClassPathXmlApplicationContext("application.xml);BookDao bookDao=(BookDao) ctx.getBean("bookDao");bookDao.save();ctx.close();//没有这个方法,ctx调用的是ApplicationContext接口,这个接口没有close方法,换成ClassPathXtmlApplicationContext,理由如下
}
有close方法,这个方法从它的父类继承过来。
- 设计关闭钩子
ctx.registerShutdownHook();
在任何时间都可以
close更暴力
在servce按照spring接口方式把生命周期做一遍不乱
set执行在init后,属性运行完后才开始运行这个操作
九.依赖注入的两种方式
- set方法
- 构造方法
- 引用类型
- 简单类型(基本数据类型与String)
十.构造器注入
十一.依赖自动装配
IoC容器根据bean依赖的资源在容器中自动查找并注入到bean的过程
按类型
按名称
十二.集合注入
十三.案例:数据源对象管理
对于第三方bean如何管
第三方资源配置管理
十三.加载properties文件
十四.容器
十五.核心容器总结
十六.注解开发
十七.纯注解开发
十八.bean的管理
十九.依赖注入
自动装配
二十.第三方bean管理
二十一.第三方bean依赖注入
二十二.注解开发总结
XML格式配置与注解格式配置比较
二十三.Spring整合MyBatis
二十四.Spring整合JUnit
二十五.AOP简介
- AOP核心概念
- AOP作用
二十六.AOP的入门案例
二十七.AOP工作流程
二十八.AOP切入点表达式
二十九.AOP通知类型
三十.AOP总结
三十一.SpringMVC简介
灵活性强
三十二.SpringMVC入门案例
三十三.入门案例工作流程
三十四.bean加载控制
三十五.PostMan工具介绍
三十六.设置请求映射路径
三十七.get请求和post请求发送普通参数
三十八.5种类型参数传递
三十九.json数据传递参数