Srping一二三

Spring是什么

  • Spring是一种简化应用程序开发的轻量级开源框架,主要由几部分组成
    • Spring Core
    • Spring Bean 提供Spring框架基本功能,核心组件是BeanFactory
    • Spring Context 提供其一个全局的上下文环境
    • JDBC JDBC封装模块
    • Spring ORM 提供了Hibernate和JPA的集成
    • Spring Transaction 事务管理模块
    • Spring Web MVC
    • Spring AOP 集成面向切面功能,提供事务管理服务
  • 简化开发:对常用API做了封装,比如JDBC的封装,使用Spring,访问数据库就不用考虑如何连接和关闭
  • 解耦:Spring帮我们管理软件之间的依赖关系,降低对象间的耦合性,让系统维护变的方便
  • 框架的框架:集成框架,方便优化扩展,比如Mybatis的集成
  • Spring框架按照设计模式打造,不用考虑后台的进行

Spring的优点

  • Spring的依赖注入降低对象替换的复杂度,提高软件的解耦
  • Spring支持切面编程,把业务逻辑和系统服务分开,将通用任务集中管理
  • 集成主流框架,高兼容度
  • 测试方便,测试相关代码已经封装在框架中

IoC

Srping IoC容器,创建管理Bean对象

  • 使用依赖注入管理Bean对象
  • 读取配置元数据 Bean Definition 实例化一个对象,相当于Java中的Class,抽象作用域,注入模型,和是否懒加载等信息
  • XML配置,注解配置和Java Config 提供配置元数据

IoC初始化过程

  • 加载配置文件,解析BeanDefinition到Map里
  • 从Map里拿出Class对象实例化,有依赖关系就调用getBean完成依赖注入

IoC DI

  • 控制翻转:对象之间依赖关系由容器创建容器维护,BeanFactory是核心接口
  • 依赖注入:使用Spring的时候通过调用set方法或者构造器建立对象间的依赖关系

实现依赖注入的三种方式

  • 构造器注入 不用设置setter方法
  • set方法注入 一定要写空参数的构造方法
  • 接口注入

Spring容器如何创建对象

  • 无参构造创建
  • 静态工场创建
  • 实例工场创建

Spring有几种配置方式

  1. XML文件
  2. 注解配置
  3. 组件扫描,Java Config配置,@Bean 和 @Configuration

Spring Bean的生命周期

  1. 实例化 Instantiation 根据配置实例化Bean对象
  2. 属性赋值 Populate 通过依赖注入填充这个Bean属性和配置,Name方法和Factory方法
  3. 初始化 Initialization 调用相应方法进一步初始化Bean对象,
  4. 销毁 Destruction 调用destroy方法或者bean-method指定的方法销毁

延迟加载

懒加载,默认容器启动时所有单例模式的bean都创建成功,设置lazy-init="true"可以延迟创建

Spring bean的作用域

  • 单例,Singleton,默认作用域,整个spring容器只有一个实例
  • 原型,Prototype,每次创建一个新对象
  • 请求,Request,每次HTTP请求创建一个新对象
  • 会话,Session,同一个会话共享一个实例,不同会话使用不用的实例
  • 全局会话,Global-session,所有会话共享一个实例

bean线程安全

bean默认单例模式,框架没有对bean进行多线程封装处理,不是线程安全
但是,对于原型bean,每次调用都创建一个新对象,线程之间不共享,没有线程安全问题
对于单例bean,所有线程共享一个实例,存在资源竞争
但是,有无状态的bean,线程不对bean进行查询以外的操作,只查询,不增删改查,则bean是线程安全的,比如Spring MVC的Controller,Service,DAO都是无状态的,只关注方法本身

Spring的设计模式

  • 代理模式:通过AOP实现动态代理,有接口用JDK proxy实现代理对象,没接口用CGlib生成子类代理
  • 单例模式:Spring默认模式
  • 工场模式:通过BeanFactory或者ApplicationContext创建bean对象,一个延迟注入启动更快,一个一次性创建所有bean
  • 模板方法模式:定义了一个算法的骨架,像是JdbcTemplate,RestTemplate等以Template结尾的类使用了模板模式
  • 观察者模式:对象与对象间的依赖关系,当一个对象改变的时候,这个对象所依赖的对象也会做出反应,比如利用监听器解耦商品索引和操作商品的依赖
  • 适配器模式:将一个接口转换成另一个接口,让不兼容的类也可以一起工作,也叫包装器。Spring AOP的增强和通知(Advice)用到了适配器模式,Spring MVC使用了适配器模式适配Controller

AOP原理

传统面向对象的开发过程逻辑是自上而下的,会产生一些横切性的问题,通过AOP把业务逻辑和横切问题分离,从而达到解耦的目的,使代码重用性提高,更容易维护
AOP的应用场景:日志记录,权限控制,事务管理,懒加载,持久化
AOP底层原理:JDK动态代理,CGLIB代理

Spring MVC

Spring MVC是一种web层的mvc框架,它是Spring的一个模块,拥有Spring的特性。Spring MVC分离了模型-视图-控制器的角色,结构清晰,各层代码各司其职,易于开发大型项目

Spring MVC的五大组件

  • 前端控制器(DispatchServlet)
  • 映射处理器(HandlerMapping)
  • 处理器(Controller)
  • 模型视图(ModelAndView)
  • 视图解析器(ViewResolver)

Spring MVC的运行原理

  • 客户端提交请求到前端控制器DispatchServlet,前端控制器找到对应的映射处理器HandlerMapping,映射处理器找到Controller处理请求,Controller处理完请求返回模型视图给ModelAndView,DispatchServlet查询视图解析器,找到视图模型里的指定视图,将结果显示到客户

Spring控制器

单例模式,有线程安全问题,避免在控制器里写字段

重定向和转发

转发Forward

  • 地址栏不变
  • 只能访问当前服务器
  • 一次请求,直接调用跳转页面返回,浏览器不知道有没有forward,
    可以共享request数据
    重定向Redirect
  • 地址栏改变
  • 访问其他站点
  • 两次请求,浏览器自己去请求跳转的网页,不能共享request数据

Spring和Struts2区别

  • Spring MVC基于方法开发,传递参数是通过方法形参,默认是单例
  • Struts2基于类开发,传递参数通过类的属性,只能是多例

REFTFUL

一种设计思想,简化get请求的结果,通过请求类型控制业务的执行

  • 简化get请求类型,减少地址链接传递的字节信息
  • 可以通过一个URL地址通过不同请求类型

Spring Boot

  • 独立运行,内嵌Servlet,Tomcat容器,所有依赖都在一个jar包里
  • 简化配置,spring-boot-starter-web启动器自动依赖其他组件,减少配置
  • 自动配置,一个jar包解决所有,不用XML配置文件

跨域

  • JSONP方式,只支持get请求
  • RESTful风格
  • CROS ORIGIN实现跨域资源共享

Nginx

Nginx是一个代理服务器,并发能力很强,可以实现负载均衡和反向代理

反向代理

  • 代理服务器,用户和服务器间的桥梁
  • 对于用户来说就是目标服务器
  • 用户不知道服务器真实地址
  • 反向代理保护里服务器的信息
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值