【Spring】Spring框架的概念,以及Spring框架的简单使用。

news2024/11/15 18:47:57

目录

1. 概念

2. Spring的体系结构介绍(了解)

 3. Spring框架的使用

3.1 环境准备

3.2 代码编写


1. 概念

总的来说就是一句话,Spring框架是一个轻量级的控制反转(IoC)面向切面(AOP)编程的容器框架,具有简单性、可测试性和松耦合性等特点。

 Servlet的缺点

  1. 代码组织混乱和复杂:Servlet需要手动处理请求和响应,并且⼀个访问地址对应⼀个 Servlet 类,增加了代码量。
  2. 耦合度高:没有框架提供的依赖注入等功能,对象之间往往有较高的耦合度。
  3. 线程安全问题:Servlet是单线程的,如果在Servlet中声明了全局性的数据,可能会存在线程安全问题。
  4. 异常处理复杂:在Servlet中处理异常需要手动进行try…catch操作,增加了代码的复杂性和出错的可能性,等等。

 Spring相比于servlet的优点

  1. 依赖注入 (DI):Spring支持依赖注入,这使得对象的依赖关系可以在运行时动态地注入,而不是在代码中硬编码,这样增加了系统的灵活性和可测试性。
  2. 面向切面编程 (AOP):Spring支持AOP,可以将横切关注点(如日志记录、事务管理)从业务逻辑中分离出来,提高代码的可读性和可维护性。
  3. MVC框架:Spring MVC是Spring的一部分,提供了一个清晰的模型-视图-控制器架构,使Web应用程序的开发更加结构化。
  4. 事务管理:Spring提供了声明式事务管理,使得事务控制变得更加简单。
  5. 异常处理:Spring提供了统一的异常处理机制,使得错误处理更为一致和高效
  6. 易于扩展和定制:Spring MVC借助Spring Framework强大的DI(依赖注入)和AOP(面向切面编程)特性,更容易进行扩展和定制。开发人员可以轻松地添加新的拦截器、过滤器等功能。而在Servlet中,需要手动开发这些功能,增加了开发难度和工作量。

2. Spring的体系结构介绍(了解)

  • Spring Core :Spring框架最基础的部分,它提供了依赖注入(DI )特征来实现容器对Bean的管理。最基本的概念是BeanFactory,它是任何 Spring应用的核心。BeanFactory是工厂模式的一个实现,它使用IoC将应用配置和依赖说明从 实际的应用代码中分离出来。
  • Spring Context :核心模块的BeanFactory使Spring成为一个容器,而上下文模块使它成为 一个框架。这个模块扩展了BeanFactory的概念,增加了对国际化(I18N)消息、事件传播以及 验证的支持。
  • pring AOP :Spring在它的AOP模块中提供了对面向切面编程的丰富支持。这个模块是在 Spring应用中实现切面编程的基础。
  • Spring DAO: 使用JDBC经常要写大量的重复代码,取得连接、创建语句、处理结果集,然后关闭 连接。Spring的JDBC和DAO模块抽取了这些重复代码,保持了数据库访问代码干净简洁,并且可以防止因关闭数据库资源失败而引起的问题。
  • Spring Web:Web上下文模块建立于应用上下文模块之上,提供了一个适合于Web应用的上下 文。另外,这个模块还提供了一些面向服务支持。
  • Spring MVC: Spring为构建Web应用提供了一个功能全面的MVC框架。可以很容易 地与其它MVC框架集成,并且使用IoC对控制逻辑和业务对象提供 了完全的分离。
  • Spring ORM: 对那些更喜欢使用对象/关系映射工具而不是直接使用JDBC的人,Spring提供了 ORM模块。Spring并不试图实现它自己的ORM解决方案,而是为几种流行的ORM框架提供了集成方 案,包括Hibernate、JDO和iBATIS SQL映射。Spring的事务管理支持这些ORM框架中的每一 个也包括JDBC。

 3. Spring框架的使用

3.1 环境准备

1.首先创建spring.xml核心配置文件 ,引入相关的依赖

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
		https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context
		https://www.springframework.org/schema/context/spring-context.xsd">
    
        <--
        该配置文件的作用就是生成实体,管理实体,为其他类提供实体。
        -->
    <bean id="books" class="com.its.pojo.Books">
        <property name="author" value="张三"/>
        <property name="title" value="张三流浪记"/>
</beans>

2.在pom.xml中引入相关依赖

<!--在spring.xml文件中,配置实体类需要的依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>5.3.26</version>
    </dependency>

    <!--提供了依赖注入和其他核心功能-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>5.3.26</version>
    </dependency>
    <!-- 包含了spring-core的所有功能,还提供了额外的功能,如资源加载 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.3.26</version>
    </dependency>
    <dependency>
    <!--spring测试依赖-->
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>5.3.26</version>
      <scope>test</scope>
    </dependency>

3.2 代码编写

1.创建books类

import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDate;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Books {

  private Integer bookId;
  private String title;
  private String author;
  private LocalDate publicationDate;
  private String isbn;
  private String genre;

}

2.移交books对象的控制权,将Books对象的创建权利移交给Spring去管理。

<!-- 将Books对象的创建权利移交给Spring -->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
		https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context
		https://www.springframework.org/schema/context/spring-context.xsd">
   
    <!--
        该配置文件的作用就是生成实体,管理实体,为其他类提供实体。
    -->
    <bean id="books" class="com.its.pojo.Books">
        <property name="author" value="张三"/>
        <property name="title" value="张三流浪记"/>
        <!-- collaborators and configuration for this bean go here -->
    </bean>
</bean>

3.创建测试类运行Spring

package com.its;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        Object books = context.getBean("books");
        System.out.println(books);
    }
}

运行结果如下,拿到了spring容器中创建的Books类型的的bean实体。

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

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

相关文章

Spring Boot+MyBatis+MySQL如何实现读写分离

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 背景 读写分离是数据库架构中的一种优化策略&#xff0c;它将读操作&#xff08;查询&#xff09;和写操作&#xff08;更新、插入、删除&#xff09;分开处理&#xff0c;通常通过将读请求和写请求分别发送…

2024年全国青少年信息素养大赛总决赛日赛程表

2024全国青少年信息素养大赛赛程表分赛场&#xff08;浙江传媒学院桐乡校区、桐乡技师学院&#xff09;日期地点时间赛项16日传媒学院8:00-9:00检录 9:00-10:30开赛图形化编程挑战赛&#xff08;小学1-3年级&#xff09;A组12:00-13:00检录 13:00-14:30开赛图形化编程挑战赛&am…

最新版Baby Audio Bundle,win和mac,持续更新,长期有效

一。Baby Audio Bundle.2024.07.WiN&MAC Baby Audio让您的混音听起来比以往任何时候都更大&#xff0c;更好&#xff0c;更有活力。这个捆绑包有七个独特的插件&#xff0c;涵盖了从延迟和混响效果&#xff08;Spaced Out&#xff09;到低保真声音&#xff08;Super VHS&am…

MySQL(8.0)数据库安装和初始化以及管理

1.MySQL下载安装和初始化 1.下载安装包 下载地址&#xff1a;https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar 2.解压…

手把手使用 SVG + CSS 实现渐变进度环效果

效果 轨道 使用 svg 画个轨道 <svg viewBox"0 0 100 100"><circle cx"50" cy"50" r"40" fill"none" stroke-width"10" stroke"#333"></circle></svg>简单的说&#xff0c;就是…

shell脚本(自动化安装各种服务)

1、自动化配置DNS服务 [rootelemestatic ~]# vim dns.sh [rootelemestatic ~]# bash dns.sh 客户端测试&#xff1a; yum -y install bind-utils echo "nameserevr 192.168.8.161" > /etc/resolv.conf nslookup www.a.com 2、自动化配置rsync服务 [rootele…

如何用Python删除电脑中的重复文件?

在生活中&#xff0c;我们经常会遇到电脑中文件重复的情况。 在文件较少的情况下&#xff0c;这类情况还比较容易处理&#xff0c;最不济就是一个个手动对比删除&#xff1b; 而在重复文件很多的时候&#xff0c;我们很难保证把重复文件全部删完。 这里给大家带来了一个便捷…

《计算机组成原理》(第3版)第2章 计算机的发展及应用 复习笔记

第2章 计算机的发展及应用 一、计算机的产生和发展 &#xff08;一&#xff09;第一代电子管计算机 1943年&#xff0c;美国国防部批准了建造一台用电子管组成的电子数字积分机和计算机&#xff08;Electronic Numerica1 Integrator And Computer&#xff0c;ENIAC&#xff…

2024年06月 Scratch 图形化(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch图形化等级考试(1~4级)全部真题・点这里 一、单选题(共10题,共30分) 第1题 运行下列程序,输入单词“PLAY”,最后角色说?( ) A:LY4AP B:AP4LY C:YA4PL D:PL4AY 答案:B 根据程序分析可知,首先获取单词字符数,然后奇数位的字母放在字符数左侧,偶数位…

基于STM32的嵌入式深度学习系统教程

目录 引言环境准备嵌入式深度学习系统基础代码实现&#xff1a;实现嵌入式深度学习系统 数据采集与预处理深度学习模型训练与优化模型部署与推理实时数据处理与反馈应用场景&#xff1a;智能物联网设备常见问题与解决方案收尾与总结 引言 随着深度学习在各种应用中的广泛采用…

HBuilder在uni-admin实现unicloud-map中poi管理

文章目录 新建uni-admin项目下载并导入插件申请地图key并配置&#xff08;本人使用的腾讯地图&#xff09;配置WebServiceAPI配置HBuilder中Web配置 启动项目进行菜单管理 新建uni-admin项目 新建项目时选择uni-admin模板 下载并导入插件 在unicloud介绍页面https://doc.dc…

GraphGNSSLib的RTKLIB——gnss_preprocessor.node的理解

gnss_preprocessor部分的理解&#xff0c;这是简单的几张流程图截图&#xff0c;自己的分析总结pdf在资源里&#xff0c;免费的&#xff0c;如果不占用大家资源可以下载&#xff0c;交流 整体的逻辑详见资源 &#xff0c;我承诺这是自己系统分析RTKLIB后&#xff0c;进行的…

苹果iOS开发中的网络数据任务API:URLSession入门实战

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 URLSession 是 iOS 开发中的一个 API&#xff0c;用于执行网络数据任务&#xff0c;如 HTTP 请求、文件下载和上传等。URLSession 提供了一种高…

射频工程师主要是干什么?

在硬件从业者中&#xff0c;有一部分从业者是专门负责射频&#xff0c;天线&#xff0c;基站信号相关工作内容的&#xff0c;他们也被称为射频工程师。并且相比与普通的硬件工程师&#xff0c;硬件测试工程师&#xff0c;专门做射频部分的射频工程师&#xff0c;相同年限下薪资…

LLM:混合精度量化概述

浮点数在计算机中的存储方式由符号位&#xff08;sign&#xff09;、指数位&#xff08;exponent&#xff09;和小数位&#xff08;fraction&#xff0c;也称为尾数、mantissa&#xff09;组成。以下是对这些部分的详细说明&#xff1a; 符号位&#xff08;Sign Bit&#xff09…

【Vue3】组件通信之props

【Vue3】组件通信之props 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日…

发送邮箱调用接口时需要注意哪些安全事项?

发送邮箱调用接口的使用方法&#xff1f;如何集成三方API接口&#xff1f; 无论是系统通知、用户注册验证还是营销邮件&#xff0c;这些功能都依赖于邮件发送接口的稳定和安全。然而&#xff0c;确保这些接口的安全性是至关重要的&#xff0c;AokSend将详细讨论在发送邮箱调用…

超13万律师使用的工具,启信宝推出“司法大数据”功能

合合信息旗下的启信宝&#xff0c;作为行业领先的商业查询APP&#xff0c;依托其3亿企业及机构的实时动态数据&#xff0c;涵盖工商、股权、司法、知识产权等多维度信息&#xff0c;推出了“司法大数据”功能。 随着大数据、人工智能技术的发展&#xff0c;律师行业已转型为开…

怎么写文献综述

怎么写文献综述 写文献综述是对已有文献资料进行系统性和批判性的评述和总结&#xff0c;以了解当前研究领域的研究成果和发展动态。 以下是撰写文献综述的一般步骤&#xff1a; 选择主题和目标&#xff1a; 确定你要综述的主题领域&#xff0c;并明确综述的目标和范围。这有…

蓝牙网关和蓝牙MESH总结

可参考&#xff1a; https://zhuanlan.zhihu.com/p/695144946 蓝牙网关 参考&#xff1a; https://www.bilibili.com/read/cv28872282/ 蓝牙网关是一种特殊的网络设备&#xff0c;它能够实现蓝牙设备与互联网或其他类型网络之间的数据传输和通信。通过蓝牙网关&#xff0c;用户…