Spring - 原理篇

Spring - 原理篇

基本介绍

1.什么是Spring

轻量开源的JavaEE开发框架,有如下特点

  1. 通过依赖注入和面向接口编程,实现代码松耦合
  2. 侵入性较低,配置可写成配置类或者配置文件
  3. 使用AOP切面编程减少模板代码量,很具有代表性
  4. 声明式事务,代替传统的编程式事务,代码更加优雅

2.优点有哪些

轻量级:Spring在大小和透明性方面绝对属于轻量级的,基础版本的Spring框架大约只有2MB

控制反转(IOC):Spring使用控制反转技术实现了松耦合。依赖被注入到对象,而不是创建或寻找依赖对象

面向切面编程(AOP): Spring支持面向切面编程,同时把应用的业务逻辑与系统的服务分离开来

Bean容器:Spring包含并管理应用程序对象的配置及生命周期

MVC框架:Spring的web框架是一个设计优良的web MVC框架,很好的取代了一些web框架

事务管理:Spring对下至本地业务上至全局业务(JAT)提供了统一的事务管理接口

异常处理:Spring提供一个方便的API将特定技术的异常(由JDBC, Hibernate, 或JDO抛出)转化为一致的、Unchecked异常

3.Spring中使用的设计模式

  • 工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例
  • 单例模式:Bean默认为单例模式
  • 代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术
  • 模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate
  • 观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现–ApplicationListener

IoC容器

1.BeanFactory和ApplicationContext的区别

BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。其中ApplicationContext是BeanFactory的子接口

  • BeanFactory

    访问SpringBean容器的根接口,包含了各种Bean的定义,读取bean配置文档,管理bean的加载、实例化,控制bean的生命周期,维护bean之间的依赖关系

  • ApplicationContext

    它是BeanFactory的派生,除了有原来根接口的功能以外,还有

    1. 支持国际化
    2. 提供在监听器中注册bean的事件
    3. 可以同时加载多个配置文件
    4. 统一的资源文件访问方式
    5. 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层

两者在加载方式上:

  • BeanFactory采用懒加载方式注入Bean,缺点是只有加载时才能发现错误,优点是省内存
  • ApplicationContext是饿汉加载,一次性加载完整,优点是能直接发现问题,缺点是占内存

两者在创建方式上:BeanFactory通常以编程的方式被创建,ApplicationContext还能以声明的方式创建,如使用ContextLoader

两者在注册方式上:都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册

关于注册方式中的BeanPostProcessor、BeanFactoryPostProcessor:这是一个Bean生命周期的接口

2.Bean的单例实现原理

通过单例注册表的方式进行实现,这个注册表的缓存是HashMap对象

如果配置文件中的配置信息不要求使用单例,Spring会采用新建实例的方式返回对象实例,并且对象的回收交给JVM进行管理

3.Bean的生命周期

流程图

深究Spring中Bean的生命周期 - Java知音号 - 博客园 (cnblogs.com)

(2条消息) Spring组件的生命周期详细全过程

容器级生命周期接口方法

  • InstantiationAwareBeanPostProcessor接口:此接口可以在Bean实例化前、Bean实例化后分别进行操作(因为里面有Before和After方法),也可以对Bean实例化之后进行属性操作(为BeanPostProcessor的子接口)。
  • BeanPostProcessor接口:此接口的方法可以对Bean的属性进行更改。
  • InstantiationAwareBeanPostProcessorAdapter:适配器类,最终实现了BeanPostProcessor这个顶级接口。

工厂级生命周期

在应用上下文装配配置文件之后立即调用

默认的bean是单例的,也就是说只有spring 容器关闭的时候才会销毁这些bean对象,如果声明的bea

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值