带你深入了解spring框架

本文详细介绍了Spring框架的核心概念,包括IOC、AOP,以及BeanFactory和ApplicationContext的区别。探讨了SpringBean的生命周期,强调了其非线程安全的特性,并分析了不同作用域下的线程安全问题。此外,还讨论了Bean的循环依赖和Spring拦截器与Servlet过滤器的区别,帮助读者深入理解Spring的内部机制。
摘要由CSDN通过智能技术生成

spring


首先,带大家回顾一下spring,相关知识点后期还会再更新。

spring复习

spring是一个轻量级的,非侵入式的,IOC,AOP,一站式的,简化企业级开发而生的。
它的核心包非常小。业务代码中不侵入框架代码。

  • IOC:控制反转。 将生成对象的权利反转给了spring框架 依赖注入DI为属性注入值
  • AOP:面向切面编程,将一些与业务代码无关的公共部分抽取出来,使用时,通过代理对象调用,从而达不修改源代码的基础上增加功能,代码的耦合度降低。
  • 一站式框架:数据持久层,web控制层…
那么如何搭建它呢?
  1. 创建spring配置文件 spring.xml文件
  2. 在spring.xml文件中配置需要让spring管理的类 bean下面有 id 、class 、 scope …
  3. spring框架读取xml文件,解析xml
  4. 通过工厂模式+反射机制 去 创建对象+代理模式
  5. 在需要使用对象时,从spring容器注入对象即可。
spring中常用的注解标签

@component
@Service
@controller

spring+jdbc

  1. JdbcTemplate
  2. 管理数据源(阿里巴巴 Druid)
  3. 事务管理
    事务管理的最基本的原理是使用AOP。
    事务传播行为是spring框架自身对事物进行功能上的增强。

BeanFactory 和 ApplicationContext

在spring容器中,BeanFactory接口是IOC容器要实现的最基础的接口,定义了管理bean的最基本的方法,例如获取实例、基本的判断等,如下图:

在这里插入图片描述
BeanFactory有多个子接口来进一步扩展bean相关的功能。
ApplicationContext也间接继承了BeanFactory,如果说BeanFactory是spring的心脏,那么ApplicationContext就是完整的身躯了。它们都可以当做spring的容器,spring容器是生成Bean实例的工厂,并管理容器中的Bean。
在这里插入图片描述
区别:

  1. BeanFactory是spring框架的基础设施,面向spring本身,是spring中比较原始的Factory,它不支持AOP、Web等spring插件。而ApplicationContext不仅包含了BeanFactory的所有功能,还支持spring的各种插件,还以一种面向框架的方式工作以及对上下文进行分层和实现继承。
  2. BeanFactory:需要等到获取某个bean的时候才会创建该bean,即延迟初始化。
  3. ApplicationContext:在启动spring容器时就会创建所有的bean(Web应用中推荐)

小结

总结:BeanFactory 和 ApplicationContext 区别

new User() 创建了一个User对象

把由spring框架创建的对象称为一个bean.

BeanFactory 接口是spring框架中最基础的接口, 定义了如何获取bean的方法.

ApplicationContext接口间接的继承了BeanFactory 接口,在此基础之上扩展功能.

BeanFactory 和ApplicationContext

BeanFactory 是最基础的,面向spring框架本身的. 在使用对象时才去创建

ApplicationContext是面向应用的,增加了功能(支持AOP 事务), 适合与web应用程序,在服务器启动时就创建.


springBean 的生命周期

一个对象什么时候创建 什么时候销毁
宏观上来讲,springBean的生命周期可以分为五个阶段:

  1. 实例化Instantiation( 创建一个原始的对象 例如 new对象 通过反射机制实现的(框架可以读到类名))
  2. 属性赋值 Populate(为对象的属性进行赋值)
  3. 初始化 Initialization(最早在Serlvet 先创建一个对象 然后调用init()进行初始化,我们的bean如果实现了某些接口,就可以去执行这些方法,用来初始化我们的对象重点在于对类进行功能提升. )
  4. 将 bean 对象放入到容器中使用(完整的 bean 创建好,将 bean 对象放入到容器中,可以使用)
  5. 销毁 Destruction(如果 Bean 实现 DisposableBean 执行 destroy)
    详解
    1.instantiate bean 对象实例化
    2.populate properties 属性赋值
    3.1 如果 Bean 实现 BeanNameAware 执行 setBeanName
    3.2 如果 Bean 实现 BeanFactoryAware 或者 ApplicationContextAware 设置工厂 setBeanFactory 或者上下文对象 setApplicationContext 对象. 初始化 …
    3.3 如果存在类实现 BeanPostProcessor(AOP) ,执行 postProcessBeforeInitialization
    3.4 如果 Bean 实现 InitializingBean 执行 afterPropertiesSet 如果配置了自己的初始化方法<bean
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值