Spring 框架的基础知识

Spring 框架是由于软件开发的复杂性而创建的,Spring 使用的是基本的 JavaBean 来完成以前只可能由 EJB 完成的事。从简单性、可测性和松耦合性角度而言,绝大部分Java 应用都可以用 Spring。
1、控制反转(Inversion of Control, IOC)
控制反转是一种设计原则,用来降低代码之间的耦合度。在传统的程序设计中,高层模块依赖于低层模块的实现细节,导致高层模块依赖低层模块的实现细节,难以进行单元测试。控制反转负责创建对象、管理对象 (通过依赖注入) 、整合对象、配置对象以及管理这些对象的生命周期。
2、依赖注入
依赖注入是Spring 实现 IOC 的一种重要手段,它将依赖关系从代码中移动到配置文件或容器中,实现了依赖的动态注入。依赖注入主要有三种方式:构造器注入、setter方法注入和接口注入。
3、Bean 的生命周期?
(1) Spring 对bean进行实例化。
(2) Spring将值和bean的引用注入到 bean对应的属性中。
(3) 如果bean实现了BeanNameAware接口,Spring将bean的ID传递给setBeanName()方法。
(4) 如果bean实现了BeanFactoryAware接口, Spring将调用setBeanFactory()方法,将bean所在的应用引用传入进来。
(5) 如果bean实现了ApplicationContextAware接日,Spring将调用setApplicationContext()方法,将bean所在的应用引用传入进来。
(6) 如果bean实现了BeanPostProcessor 接口,Spring将调用他们的post-ProcessBeforeInitalization()方法。
(7) 如果bean实现了InitializingBean接口,Spring将调用他们的 after-PropertiesSet()方法,类似地,如果bean使用init-method声明了初始化方法,该方法也会被调用。
(8) 如果bean实现了BeanPostProcessor接日,Spring将调用它们的post-ProcessAfterInitialization()方法
(9) 此时, bean已经准备就绪,可以被应用程序使用了,他们将一直驻留在应用上下文中,直到该应用被销毁。
(10) 如果bean实现了 DisposableBean 接口,Spring将调用它的 destory()接口方法,同样,如果 bean 使用 destroy-method 声明了销毁方法,该方法也会被调用。
4、SpringMVC的几个组件?
◆ DispatcherServlet:前端控制器,也叫中央控制器。相关组件都是它来调度。
◆ HandlerMapping:处理器映射器,根据URL路径映射到不同的Iandler。
◆ HandlerAdapter:处理器适配器,按照HandlerAdapter的规则去执行Handler。
◆ Handler :处理器,由我们自己根据业务开发。
◆ ViewResolver:视图解析器,把逻辑视图解析成具体的视图。
◆ View:一个接口,它的实现支持不同的视图类型(freeMaker,JSP等)
5、SpringMVC工作流程:
(1) 用户请求旅程的第一站是 DispatcherServlet。
(2) 收到请求后,DispatcherServlet 调用 HandlerMapping,获取对应的Handler。
(3) 如果有拦截器一并返回。
(4) 拿到Handler后,找到 HandlerAdapter,通过它来访问Handler,并执行处理器
(5) 执行Handler的逻辑。
(6) Handler会返回一个 ModelAndView 对象给 DispatcherServlet
(7) 将获得到的ModelAndView对象返回给DispatcherServlet.
(8) 请求 ViewResolver解析视图,根据逻辑视图名解析成真正的View。
(9) 返回View给 DispatcherServlet。
(10) DispatcherServlet 对View进行渲染视图。
(11) DispatcherServlet 响应用户
5、接口多个实现类调用哪个实现类的三种方案
代码所示:

@Autowired 
private UserService userService 

在这个 UserService 有多个实现类(分别为 UserServiceImplOne、UserServiceImplSecond、UserServiceImplThird)的情况下三种方式定义调用实现类:
方法1:

@Autowired
private UserService userServiceImplOne

在变量名中直接写成想要调用的那个实现类名称,名称规定为首字母小写

方法2
@Primary 注解,标注在实现类上,注解意思:优先使用本类。

方法3
结合使用:
只需要在注⼊的时候,额外通过另外⼀个注解@Qualifier来标识需要注⼊实现类的名字

@Autowired
@Qualifier("userServiceImplOne")
private UserService userService;

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

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

相关文章

差分进化算法

一、简介 差分进化(DE)是一种算法,通过创建一些随机个体,将它们与预定义的评估指标进行比较,并保留最好的个体,然后通过混合剩余个体的特征来创建新的个体,并重复这个过程来解决全局优化问题。…

嵌入式c语言4——类型修饰符

register,将变量保存在寄存器中,使得访问速度增加 const是常量,static是静态量,volatile是

从0-1实现一个前端脚手架

https://gitee.com/childe-jia/kfc-cli.git gitee完整地址 介绍 为什么需要脚手架? 脚手架本质就是一个工具,作用是能够让使用者专注于写代码,它可以让我们只用一个命令就生成一个已经配置好的项目,而不用我们再花时间去配置和安…

zabbix 与 grafana 对接

一.安装 grafana 1.初始化操作 初始化操作 systemctl disable --now firewalld setenforce 0 vim /etc/selinux/config SELINUXdisabled 2.上传数据包并安装 cd /opt grafana-enterprise-9.4.7-1.x86_64.rpm #上传软件包 yum localinstall -y grafana-enterprise-9.4.7-1…

Faster R-CNN 和 YOLO 对比

Faster R-CNN 和 YOLO 是两种常用的目标检测算法,它们在结构、性能和适用场景上有显著的区别。以下是两者的详细对比,包括各自的优缺点: Faster R-CNN 结构和原理: 两阶段检测器:Faster R-CNN 先通过区域提议网络&a…

Javascript常见数据结构和设计模式

在JavaScript中,常见的数据结构包括两大类:原始数据类型(Primitive Types)和对象类型(Object Types)。对象类型又可以进一步细分为多种内置对象、数组、函数等。下面是一些JavaScript中常见的数据结构&…

Nginx 虚拟主机和反向代理 (同一个ip多个二级域名配置不同的前端服务)

把多个二级域名映射到不同的文件目录,例如 bbs.abc.com,映射到 html/bbs blog.abc.com 映射到 html/blog http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80…

PyFluent入门之旅(4)算例求解

在网格划分完成或已有网格的情况下,可以进行算例的求解。 1. 切换/打开求解器 一般启动求解器前有两种情况: 已启动FluentMeshing并生成了网格,需要在不退出FluentMeshing的情况下直接切换至Fluent求解器。已经有现成的网格文件&#xff0…

检测到弱密码:并非所有密码套件均支持完全前向保密解决方案

问题 检测到弱密码:并非所有密码套件均支持完全前向保密(弱密码套件 - ROBOT 攻击:服务器支持易受攻击的密码套件) 背景介绍 HTTP 协议自身没有加密机制,但可以通过与 TLS (Transport Layer Security) / SSL (Secur…

【AI资讯】快手 可灵web端上线

可灵 AI – 新一代 AI 创意生产力平台 快手 可灵web端上线了,目前登录即可用,感兴趣可以试试。

释放扩展的束缚:精通 IPython 的 %uninstall_ext 命令

释放扩展的束缚:精通 IPython 的 %uninstall_ext 命令 IPython,这个强大的交互式计算工具,通过扩展提供了无限的可能性。然而,有时候我们可能需要移除一些不再需要的扩展。本文将详细指导如何在 IPython 中使用 %uninstall_ext 命…

GitHub每日最火火火项目(7.7)

项目名称:microsoft / graphrag 项目介绍:这是一个模块化的基于图的检索增强生成(RAG)系统。它可能在处理和生成与图结构相关的数据方面具有强大的能力,能够利用图的信息来增强检索和生成的效果。该系统的模块化设计可…

90元搭建渗透/攻防利器盒子!【硬件篇】

前言 以下内容请自行思考后进行实践。 使用场景 在某些情况下开软件进行IP代理很麻烦,并不能实现真正全局,而且还老容易忘记,那么为了在实景工作中,防止蓝队猴子封IP,此文正现。 正文 先说一下实验效果&#xff1…

53-1 内网代理3 - Netsh端口转发(推荐)

靶场还是用上一篇文章搭建的靶场 :52-5 内网代理2 - LCX端口转发(不推荐使用LCX)-CSDN博客 一、Netsh 实现端口转发 Netsh是Windows自带的命令行脚本工具,可用于配置端口转发。在一个典型的场景中,如果我们位于公网无法直接访问内网的Web服务器,可以利用中间的跳板机通过…

【LeetCode】十三、分治法:多数元素 + 最大子序列和

文章目录 1、分治法2、leetcode169:多数元素3、leetcode53:最大子序和 1、分治法 分治一般都搭配递归使用: 用分治法的一个应用——归并排序:将一组数不停的一分为二,直到分到每组只有一个数的时候 分到每组只有一个数…

Python28-7.5 降维算法之t-分布邻域嵌入t-SNE

t-分布邻域嵌入(t-distributed Stochastic Neighbor Embedding,t-SNE)是一种用于数据降维和可视化的机器学习算法,尤其适用于高维数据的降维。t-SNE通过将高维数据嵌入到低维空间(通常是二维或三维)中&…

git github gitee 三者关系

Git: Git 是一个分布式版本控制系统,用于跟踪源代码的更改。它由 Linus Torvalds 于 2005 年开发,目的是更好地管理 Linux 内核开发。Git 是一个命令行工具,具有以下特点: 分布式:每个开发者的工作目录都是…

【深度学习】什么是交叉注意力机制?

文章目录 区别传统的自注意力机制交叉注意力机制区别总结应用实例自注意力机制的应用:交叉注意力机制的应用: 代码自注意力机制的实现交叉注意力机制的实现说明 交叉注意力机制的发展趋势 区别 交叉注意力机制(Cross-Attention Mechanism&am…

【Git】入门到专家,Git手动配置Config脚本

为什么要手动配置脚本 手动配置脚本,好比是一个专家模式,它能加深你对Git的理解 如果纯粹复制粘贴网上的指令,不懂得其中原理,项目一多,仓库一多,发生冲突时自己就没法解决 Git的脚本非常简单&#xff0…

【php相关总结】

php相关总结 一、分库分表 垂直拆分和水平拆分 垂直拆分: 1.大表拆小表,常用的字段单独拆分出来,直接访问小表 2.每个库表不一样,但是有一个相同的外键关联 水平拆分: 1.hash取模拆分。 2.每个库表结构都一样&#xf…