11.JavaWeb-Spring框架

news2025/1/23 9:25:44

1.Spring概念

        Spring框架是一个轻量级开源的应用程序框架,用于开发Java企业级应用程序。它提供了一种综合的编程和配置模型,可以帮助开发人员构建灵活、可扩展且易于维护的应用程序。

        Spring的根本使命:简化Java开发

        【Spring给予了Java新生】

1.1 Spring特点

  1. 解耦和简化开发:通过IOC容器管理对象的依赖关系,简化了代码的耦合度,让开发者专注于业务逻辑的实现。

  2. IOC容器管理对象:Spring负责对象的创建和注入,降低了对象之间的耦合度。

  3. 集成支持:提供对主流框架的集成支持,方便开发者使用其他框架的功能。

  4. 面向切面编程(AOP):实现横切关注点的模块化,如权限拦截、事务管理、日志记录等。

  5. 高度可开放性:开发者可以选择使用Spring的部分或全部特性,也可以与其他框架灵活集成。

2.Spring核心(Spring Core)

        spring为企业级开发提供了丰富的功能,这些功能的底层都依赖于他的两个核心特性:依赖注入(DI)、面向切面编程(AOP)

2.1 依赖注入

        DI能够让相互协作的软件组件保持松散耦合,依赖注入通过IOC容器实现

2.1.1 耦合度

        耦合就是联系的紧密程度,一方面,紧密耦合的代码难以测试、难以复用、难以理解,经常修复一个bug,出现一个或者更多新的bug另一方面,一定程度的耦合又是必须的,完全没有耦合的代码什么也做不了

        通过DI,对象无需自己创建依赖关系,依赖关系将被自动注入到需要他们的对象中

2.1.2 控制反转(IOC)

        IOC是一种软件设计原则,基本概念:不创建对象 

        传统的程序设计中,对象之间的依赖关系是由对象自己创建和管理的。这样的设计方式导致了高耦合度、难以维护和测试的代码。

        而控制反转则是将对象之间的依赖关系的控制权反转给了框架或容器。对象不再直接创建和管理它所依赖的对象,而是由外部的框架来负责创建和注入依赖。对象只需声明它所需要的依赖,由框架在合适的时机将依赖注入进去。

        IOC容器负责创建、组装和管理对象,对象只需通过配置文件或注解来声明依赖关系,而不需要显式地创建和管理这些对象。框架会根据配置文件或注解的信息,自动创建和注入依赖对象,从而实现了对象之间的解耦。

2.1.3 依赖注入的方式

        1.构造函数注入

        2.Setter方法注入

        先在相应的xml文件中创建对象,并赋值

<!--通过setter赋值:无参构造+setter-->
    <bean id="aaa" class="com.entity.User" >
        <property name="account" value="list"></property>
        <property name="password" value="123"></property>
    </bean>

         再在需要调用对象的类中加载spring的配置文件来得到上下文对象,再用上下文对象获取要调用的对象

//1.加载spring的配置文件,得到应用程序上下文对象
ApplicationContext context = new ClassPathXmlApplicationContext("spring-context.xml");

//2.获取想要的对象
Object aaa = context.getBean("aaa");

        3.注解注入:日常开发用的最多

        实现起来简单,只需给变量添加一个@Resource或者@Autowired注解,并在xml文件中开启注解扫描即可

@Resource
private EmployeeServiceimpl employeeServiceimpl;

@Autowired
private EmployeeServiceimpl employeeServiceimpl;
<!--开启注解扫描,扫描指定的包,创建对象-->
<context:component-scan base-package="com.*"></context:component-scan>

2.2 面向切面编程

        面向切面编程允许把遍布应用各处的功能分离出来形成可重用的组件

2.2.1 不使用面向切面编程的问题

        1.有时一段代码可能会重复出现在多个组件中,当你想改变这段代码时,必须修改各个组件中的相关实现,就算把这段代码封装起来,其他组件只是调用他的方法,但方法的调用还是会重复出现在各个组件中

        2.组件会因为那些与自身核心业务无关的代码而变得混乱,一个向地址册增加地址条目的方法应该只关注如何添加地址,而不应该关注它是不是安全的或者是否需要支持事务

2.1 IOC控制反转

        将对象的创建和依赖关系的管理从应用程序代码中反转到框架(如Spring)中进行

        传统的开发方式中,应用程序代码通常负责创建对象并维护对象之间的依赖关系。这样的设计可能导致高度耦合的代码,难以维护和测试。而IOC的思想是将对象的创建和依赖关系的管理交给框架来完成,从而实现解耦、灵活和可扩展的设计。 

        在Spring框架中,IOC通过IOC容器来实现。IOC容器负责创建和管理对象,应用程序通过IOC容器来获取需要的对象实例,而不是直接在代码中创建对象。

        实现IOC的方式有多种,其中最常见的方式是依赖注入(Dependency Injection)。依赖注入是指通过构造函数、属性注入或方法注入的方式将对象的依赖关系注入到目标对象中。通过依赖注入,可以将对象之间的关系解耦,提高代码的可测试性和可维护性。

        Spring框架提供了多种方式来实现依赖注入,包括XML配置、注解和Java配置等。开发者可以根据需求选择合适的方式进行配置和使用。

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

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

相关文章

文心一言 VS 讯飞星火 VS chatgpt (40)-- 算法导论5.4 4题

四、一次聚会需要邀请多少人&#xff0c;才能让其中 3 人的生日很可能相同? 文心一言&#xff1a; 为了解决这个问题&#xff0c;我们需要先计算出所有可能的生日组合数&#xff0c;然后计算出其中生日相同的组合数。 已知需要邀请的人数为&#xff1a;23人 根据组合数公式…

大数据开发之Hive案例篇12:HDFS rebalance 一例

文章目录 一. 问题描述二. 解决方案2.1 增加节点2.2 rebalance2.3 rebalance引发的问题 一. 问题描述 公司的离线数仓是CDH集群&#xff0c;19个节点&#xff0c;HDFS存储空间大约400TB左右&#xff0c;使用量在200TB左右。 由于历史遗留的问题&#xff0c;数据仓库需要重构&a…

将Qtcreator编译器、调试器等配置为MSVC2017/2019

目录 1. 前言 2. 工具/原料 2.1. 安装Windows下的软件开发调试器 3. 配置Qtcreator 1. 前言 安装Qt或Qtcreator时&#xff0c;一般选择MinGW 64-bit或MSVC编译器。对于MinGW 64-bit很简单&#xff0c;一般安装后会自动在Qtcreator配置好&#xff0c;不用费心就可以进行开发…

一种对不同类型齐格勒-尼科尔斯 P-I-D 控制器调谐算法研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

基于NIM_DUILIB_FRAMEWORK框架的网易云信demo:NIM_PC_DEMO

NIM_PC_DEMO 网易云信 PC IM Demo 是基于网易云信 PC SDK 制作的即时通讯示例程序&#xff0c;UI 库使用 NIM Duilib 制作。 github地址:。 1、预览 2、最低要求 CMake 3.10 或以上版本。Visual Studio 2017 或以上版本。Git。 3、开发步骤 NIM Demo 从 8.4.0 版本开始使…

selenium面试题总结

今天有同学问到seleinum面试的时候会问到的问题&#xff0c;随便想了想&#xff0c;暂时纪录一下。欢迎大家在评论中提供更多问题。 1.selenium中如何判断元素是否存在&#xff1f; selenium中没有提供原生的方法判断元素是否存在&#xff0c;一般我们可以通过定位元素异常捕获…

Java网络开发(Tomcat同步数据增删改查)—— 用Jsp语法实现同步请求的 增删改查

目录 引出显示所有数据到前端&#xff08;1&#xff09;前端代码&#xff1a;list.jsp&#xff08;2&#xff09;后端代码&#xff1a;CompanyListServlet.java 新增数据---转发类型信息---新增信息业务&#xff08;1&#xff09;在list.jsp页面点击添加&#xff08;2&#xff…

don‘t have write permissions for the /System/Library/Frameworks/Ruby.framework

don’t have write permissions for the /System/Library/Frameworks/Ruby.framework sudo gem install sigh或sudo gem install -n /usr/local/bin cocoapods --pre出现&#xff1a; appleCQIMAC-L1A9Q05R ~ % sudo gem update --system Password: Updating rubygems-update F…

社会心理学(1) 社会心理学的定义

今天开始 我们一起学习一门课程 社会心理学 社会心理学 他是 应用心理学 或者 心理学专业的一个必修课 吴江霖教授说过 心理学应该分为两大分支 生理心理学 和 社会心理学 如果认同他的观点 那么 社会心理学可谓是相当重要了 社会心理学的定义之广可以说 有多少社会心理学教…

书山有路勤为径 学海无涯苦作舟(AI引领时代浪潮)

书山有路勤为径 学海无涯苦作舟 AI模型是如何训练的&#xff1f; 数据准备 在训练AI模型之前&#xff0c;需要准备大量的数据集。数据集的质量和多样性直接影响模型训练的效果。数据集准备的主要工作包括&#xff1a; 数据清洗&#xff1a;清除数据中的噪声、错误、重复等不…

STM32单片机(六)TIM定时器 -> 第一节:TIM定时中断

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

震惊!kratos的make命令windows下无法使用

Make 命令 kratos想在windows下开发的舒服&#xff0c;各种 命令必须得支持&#xff0c;不然一个protoc就是噩梦&#xff0c;好在官方内置了一些make api这样的命令&#xff0c;坏在windows不支持make命令&#x1f602; MinGw 百度一搜大概是MinGW 这么个东西&#xff0c;这…

【Linux】软硬链接与动静态库

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器 Linux文章都放在了专栏&#xff1a;【 Linux 】欢迎支持订阅 &#x1f339; 相关文章&#xff1a; 【Linux】动静态库以及动静态链接 【Linux】基础IO_文件系统 软硬链接 软链接 我们知道&#xff0c;每一个文件都会有自己…

TypeScript学习(1)- ts基础配置介绍

目录 TypeScript是什么&#xff1f; TypeScript开发环境搭建 TypeScript是什么&#xff1f; 以JavaScript为基础构建的语言一个JavaScript的超集typescript扩展了JavaScript&#xff0c;并添加了类型可以在任何支持JavaScript的平台中执行TS不能被js解析器直接执行&#xff0…

【多线程与高并发】- 锁的机制与底层优化原理

锁的机制与底层优化原理 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 一个有梦有戏的人 怒放吧德德 &#x1f31d;分享学习心得&#xff0c;欢迎指正&#…

c语言第二课------地基打牢,基础打紧,不可放弃

作者前言: 欢迎小可爱们前来借鉴我的gtieehttps://gitee.com/qin-laoda 目录 变量的作用域和生命周期 常量 字符串转义字符注释 选择语句 循环语句 函数 _________________________________________________ 这次我们接着上一篇博客,我们接着来继续C语言的学习 变量的作用…

四十六、B+树

这一次我们来介绍B树。 一个m阶的B树具有如下几个特征&#xff1a; 1.根结点至少有两个子女。 2.每个中间节点都包含k-1个元素和k个孩子&#xff0c;其中 m/2 < k < m 3.每一个叶子节点都包含k-1个元素&#xff0c;其中 m/2 < k < m 4.所有的叶子结点都位于同一层。…

Python学习ing

Python中 字符串不能通过 &#xff0c;把 数字等非字符串&#xff0c;进行拼接&#xff0c; 但Javascript中是可以的。 会把数字自动转换成字符串&#xff0c; 但python 提供了占位符 %s % 占位符 city "徐州" age 20 message "我是%s人,今天%s岁" …

面向对象继承

2. 面向对象特征二&#xff1a;继承(Inheritance) 2.1 继承的概述 说到继承我们会想到什么 在Java面向对象程序设计中的继承&#xff0c;多个类中存在相同属性和行为时&#xff0c;将这些相同的内容抽取到单独一个类&#xff08;父类&#xff09;中&#xff0c;然后所有的类继…

新能源汽车保养vr仿真教学软件为职业培训带来新的思路和方法

电动车电池更换VR虚拟体验是一种利用VR虚拟现实技术实现对电动车电池更换进行模拟仿真演示和实操训练的虚拟仿真实验教学课件&#xff0c;相比传统教学模式&#xff0c;有效提高学生的实践能力和技能水平。 通过VR技术模拟现场&#xff0c;使培训人员可以身临其境滴观摩操作过程…