使用spring的好处
- 轻量级框架
- 通过控制反转形成轻量耦合,给出对象的依赖,而不是查找对象
- 支持面向切面编程
- 使用容器包含并管理对象的生命周期和配置
- 替代MVC框架
- 事务管理接口
- 异常处理一直转换
AOP
- 基于切面编程,无入侵的在原本的切面层添加自定义代码,用于日志收集,权限认证等
- 在目标对象(target objectZ)的某些方法(jointpoint)添加不同种类的操作,形成一个新的代理目标的对象
AOP代理
- JDK动态代理,只能代理接口,不能代理类
- 如果想代理类,使用CGLIB
JDK动态代理的实现
- 创建一个类实现IvocationHandler,必须实现invoke方法
- 创建被代理的类和接口
- 通过proxy静态方法创建一个代理
public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) throws IllegalArgumentException
- 通过代理创建方法
通知类型
- 前置通知
- 后置通知
- 返回后通知
- 环绕通知
- 抛出异常后通知
IOC
- 控制反转,借助第三方实现具有依赖关系的对象的解耦
- 将对象的控制权全部上交给容器,控制这些对象间的关系
- IOC在运行期间,动态的将某种依赖关系注入到对象中
bean的生命周期
- 构建,设置属性,容器启动的时候创建,注入IOC
- 后置处理器的前置处理方法
- 初始化
- 后置处理器的后置处理方法
- 销毁
bean的作用域
- singleton,唯一bean的实例,只能创建一个
- prototype:每次请求都会创建一个
单例Bean的线程安全
- 在类中定义一个ThreadLocal成员变量,将可变成员变量保存在ThreadLocal中
spring常见的注入方式
- 构造器依赖注入
- setter方法注入
- 基于注解注入
Spring框架中的设计模式
- 工厂设计模式:通过BeanFactory,ApplicationContext创建bean对象
- 代理设计模式:AOP
- 单例设计模式:Bean默认
- 模板方法模式:JDBCtemplate
- 适配器模式
- 观察者模式
- 包装器设计模式
MVC模式
- MODEL模型
- VIEW视图
- controller控制器
SpringMVC执行流程
- 客户端发送请求
- 前端控制器DispatcherServlet接收用户请求
- 处理器映射HandlerMapping解析handler返回给DispatcherServlet
- DispatcherServlet 发送信息给处理器适配器handleradaptor,找到处理器执行,得到对应的modelandview
- DispatcherServlet 将视图模型发给视图解析器,返回视图
- DispatcherServlet 调用执行,得到视图返回给对象
常用注解
- @ResquestMapping,处理url映射的注解,即用什么地址可以找到该方法
- @RequestBody,将前端传过来的请求体拿出,写入contoller传入的对象,加在传入的参数上
- @ResponseBody:该方法返回一个对象给前端,被转化为json字符串(@Controller)
单例模式
- controller是单例模式,有线程安全问题
MYBATIS
- 内部封装了jdbc,可以直接写sql语句
- "#{}"是占位符
controller是单例模式,有线程安全问题
MYBATIS
- 内部封装了jdbc,可以直接写sql语句
- "#{}"是占位符