spring中BeanFactory 和ApplicationContext

news2024/11/27 10:28:34

在学习spring的高阶内容时,我们有必要先回顾一下spring

回顾spring

1.什么是spring

spring是轻量级的,指核心jar包时很小的;非侵入式的一站式框架(数据持久层,web层,核心aop),为了简化企业级开发。

核心是IOC,AOP

IOC:控制翻转 把创建对象交给spring框架管理(创建对象与使用对象分离),管理对象的生命周期

DI:依赖注入 创建对象后,把对象属性赋值,将关联的对象注入

AOP:面向切面编程(对面向对象编程的一个补充,并不是所特有的),通过一个代理对象,在不修改原来代码的情况下,对目标类进行功能的增强;例如事务管理、日志等

简化了开发,使得类与类之间的耦合度降低了,简化了开发步骤。

2.spring中Bean管理

1.在xml中配置

2.使用注解

如@Component包括@controller、@service、@Repesitory等标签用来声明bean的注解,即这些对象交由spring管理;

依赖注入/自动注入

@Autowired spring中提供的,支持类型,对象名查找,通过这个标签可以使用对象;

@Resource jdk提供的,支持类型,对象名查找

3.spring JdbcTemplate

4.AOP

连接点,切入点,切面,通知(前置通知,后置通知、异常通知、返回通知、最终通知、 环绕通知),代理,置入

xml实现,注解实现

5.Spring事务管理

添加一个事务管理器

事务方式:

1.编程式 在代码中自己开启,自己提交,回滚

2.声明式 @Transactional 修饰方法、类

声明式事务失效的场景

事务传播行为:是spring框架对事务的一个额外的增强,A方法调用了B方法,B方法应该怎么做

6.集成Mybatis

7.SpringWeb

流程:请求到来后,先到达DispacherServlet捕获,它是前端控制器,springweb核心,用来接收所有前端发送的请求统一进行分发调度。然后到映射处理器handerMapper,他专门对地址url进行解析,检测当前地址有没有配置处理器/拦截器,若有则返回给前端控制器dispatcherServlet一个handler处理器对象,然后前端控制器根据获得的handler对象,选择合适的处理适配器HandlerAdapter,此时在填充handler的入参过程中,它会根据要求对请求中数据进行组装,然后执行处理器中的业务代码(controller),完成后将响应数据响应到前端json类型,只需return即可。

BeanFactory 和ApplicationContext

它们都是接口

BeanFactory

BeanFactory接口是spring框架顶层的接口之一,是IOC容器的最基础的接口,用来定义一些最基本,最简单的管理bean的方法,如获取bean等等

BeanFactory有非常多的实现类,每个实现类都有不同的职责(单一职责),最强大的是DefaultListableBeanFactory Spring底层就是使用的该实现工厂进行生产bean对象(spring管理的类生产的对象)的;

ApplicationContext

间接继承了BeanFactory接口,并且扩展了一些新的功能

二者的所处地位如下:

二者区别

1.BeanFactory是Spring框架的基础设施,面向spring本身,是spring原始的factory,他不支持AOP、Web等插件,即就是实现了BeanFactory的工厂,不能有这些功能。而ApplicationContext不仅包含了Beanfactory的所有功能,还支持spring的各种插件,实现AOP的多种功能。

2.BeanFactory采用的是延迟加载的形式注入Bean的,只有是使用创建Bean对象时,才会对该bean进行加载实例化,这样,我们就不能发现一些存在的 Spring 的配置问题。而 ApplicationContext 则相反,它是在容器启动时,一次性创建了所有的 Bean。这样,在容器启动时,我们就可以发现Spring 中存在的配置错误。相对于基本的 BeanFactory,ApplicationContext 唯一的不足是占用内存空间。当应用程序配置 Bean 较多时,程序启动较慢

beanFactory面向spring框架,比较底层

ApplicationContext 由于实现了许多的接口,增加了额外的功能

实现了BeanFactory接口的工厂,是懒加载,获取bean时才会创建对象。

实现了ApplicationContext接口的工厂,在启动时加载所有的类,创建对象。

Servlet的过滤器Filter与Spring拦截器区别

Filter过滤器:属于底层的javaweb/servlet中定义的,实现由服务器调度;拦截范围更大,所有进入到web后端的请求,都可以被过滤器拦截;

spring拦截器Interceptor:是在请求进入servlet后,在进入controller之前进行预处理的。

下面的图能够有助于我们的理解:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/372958.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python自动化测试实战篇(6)用PO分层模式及思想,优化unittest+ddt+yaml+request登录接口自动化测试

这些是之前的文章,里面有一些基础的知识点在前面由于前面已经有写过,所以这一篇就不再详细对之前的内容进行描述 Python自动化测试实战篇(1)读取xlsx中账户密码,unittest框架实现通过requests接口post登录网站请求&…

计算及网络第一章

计算机网络-第一章 概述 文章目录计算机网络-第一章 概述计算机网络在信息时代中的作用互联网概述网络的网络互联网的组成网络的边缘部分互联网的核心部分电路交换的主要特点分组交换的主要特点计算机网络的类别几种不同类别的计算机网络计算及网络的性能计算机网络的性能指标计…

面向对象之-接口鉴权

1 需求 1.1 需求背景 为了保证接口调用的安全性,我们希望设计实现一个接口调用鉴权功能,只有经过认证之后的系统才能调用我们的接口,没有认证过的系统调用我们的接口会被拒绝。 2 需求分析 2.1 基础分析 对于如何做鉴权这样一个问题&…

配置 Haproxy 负载均衡群集

配置 haproxy 负载均衡群集 🏆荣誉认证:51CTO博客专家博主、TOP红人、明日之星;阿里云开发者社区专家博主、技术博主、星级博主。 💻微信公众号:微笑的段嘉许 📌本文由微笑的段嘉许原创! &#…

Android 基础知识4-3.3 Button(按钮)与ImageButton(图像按钮)详解

一、引言 今天给大家介绍的Android基本控件中的两个按钮控件,Button普通按钮和ImageButton图像按钮; 其实ImageButton和Button的用法基本类似,至于与图片相关的则和后面ImageView相同,所以本节 只对Button进行讲解,另外…

MySQL进阶之锁

锁是计算机中协调多个进程或线程并发访问资源的一种机制。在数据库中,除了传统的计算资源竞争之外,数据也是一种提供给许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决堆的一个问题,锁冲突也是影响数据…

Neo4j列表函数

使用列表 标量列表函数 size() 函数返回列表中的元素的数量 MATCH (p:Person)-[:ACTED_IN]->(m:Movie) WITH p, collect (m.title) AS MovieTitles WITH p, MovieTitles, size(MovieTitles) AS NumMovies WHERE NumMovies > 20 RETURN p.name AS Actor, NumMovies, Movie…

浙大PTA拼题A读者验证码刷题页面、PTA免费刷题页面(不需要读者验证码)

有一个B站号李桥桉,很多年前讲过PTA里的一些题目的解法。近两年有好多同学反馈,需要读者码才能进行答题,不然只能免费注册、看题、编写代码,就是不能提交代码(大受震撼)。 咱就是说,会不会是同学们找错页面了&#xff…

【数据库】第十二章 数据库管理

第12章 数据库管理 数据库的物理存储 关于内存、外存、磁盘、硬盘、软盘、光盘的区别_Allenzyg的博客-CSDN博客_磁盘和硬盘的区别 数据库记录在磁盘上的存储 定长,变长跨块,非跨快 文件的组织方方法: 无序记录文件(堆文件heap或pile file…

eddsa 算法

信息安全课程设计:eddsa 算法 一、项目要求 使用 C 语言开发;可以实现公私钥生成、签名、认证;只需要手动输入明文,代码会自动生成公私钥、签名、认证;记录公私钥生成、签名、认证的时间;在 VS 上运行&am…

React useCallback如何使其性能最大化?

前言 React中最让人畅谈的就是其带来的灵活性,可以说写起来非常的舒服。但是也就是它的灵活性太强,往往让我们忽略了很多细节的地方,而就是这些细节的东西能进行优化,减小我们的性能开销。可以说刚学React和工作几年后写React的代…

JVM内存结构之堆(重要)

1、概述每个JVM进程有且只有一个堆,进程内的所有线程共享这块区域,堆区在JVM启动的时候即被创建,其空间大小也就确定了,是JVM内存结构中最大的一块区域。由于线程共享,堆也就成了JVM内存管理的核心区域。《Java虚拟机规…

热爱所有热爱

想成为这样的一个人,在工作中是一名充满极客精神的Programmer,处理遇到的问题能够游刃有余,能够做出优雅的设计,写出一手优秀的代码,还有着充分的学习能力和业务能力,做一名职场中的佼佼者。 在工作之余还能…

15、条件概率、全概率公式、贝叶斯公式、马尔科夫链

条件概率定义:设A、B是两个事件,且,P(A) > 0 则称 为事件A发生的条件下事件B的条件概率对这个式子进行变形,即可得到概率的乘法公式:P(A) > 0 时,则P(B) > 0 时,则乍一看,…

数字化转型导师坚鹏:BLM农商行数字化转型实战解决方案及案例

BLM农商行数字化转型实战解决方案及案例研究 ——以BLM模型为核心,践行知行合一思想,实现知行果合一 课程背景: 很多农商行存在以下问题: 不知道如何开展数字化转型工作? 不清楚农商行数字化转型方法论? …

Python—单分支结构

&#xff08;1&#xff09;if分支语句 Python中if语句的语法结构&#xff1a; if <条件表达式>&#xff1a;    满足条件运行的代码1    满足条件运行的代码2 代码示例&#xff1a; age 12 if age > 18:print(去上网)if 1 1 2 and :print(我满足条件了)if 1 …

【C++】C++入门(下)

引用 什么是引用&#xff1f;   引用是给一个已经存在的变量取一个别名&#xff0c;在语法上并不会给这个别名开一个空间&#xff0c;它和她引用的变量共用一个空间。但是实际上引用也是开了一块空间的&#xff0c;用来存放引用名。引用是按照指针的方式来实现的。引用语法&…

电子技术——B类输出阶

电子技术——B类输出阶 下图展示了一个B类输出阶的原理图&#xff0c;B类输出阶由两个互补的BJT组成&#xff0c;不同时导通。 原理 当输入电压 vI0v_I 0vI​0 的时候&#xff0c;两个晶体管都截止输出电压为零。当 vIv_IvI​ 上升至超过0.5V的时候&#xff0c;此时 QNQ_NQN…

MVVM 架构进阶:MVI 架构详解

前言Android开发发展到今天已经相当成熟了&#xff0c;各种架构大家也都耳熟能详&#xff0c;如MVC,MVP,MVVM等&#xff0c;其中MVVM更是被官方推荐&#xff0c;成为Android开发中的显学。不过软件开发中没有银弹&#xff0c;MVVM架构也不是尽善尽美的&#xff0c;在使用过程中…

【软件测试】从功能到自动化测试,测试人的进阶之路细节,这些必不可少......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 测试流程&#xff0…