Spring框架基础

news2024/12/23 20:51:02

前言

        本文将讲解spring框架的基础内容

Spring

        首先,我们需要了解,spring是什么?

        spring是一个轻量级的IOC和AOP的一站式java开发框架

        作用是简化企业级开发

        轻量级:框架体积小(核心模块)

        其中 IOC: Inversion of Control 控制反转

        IOC的作用是可以把创建对象的控制权,反转给spring框架

        控制反转 这是一种编程思想 把生成的对象的控制权,反转给spring框架,spring框架负责管理对象的整个生命周期过程

        对外提供获取对象的方法,我们在程序中哪里需要使用,就在哪里获取即可

        我们需要使用的对象都由ioc容器进行管理,不需要我们去手动通过new 的方式去创建对象,由ioc容器直接帮我们组装好,当我们需要使用的时候直 接从ioc容器中直接获取就可以了。

正控:若要使用某个对象,需要自己去负责对象的创建

反控:若要使用某个对象,只需要从 Spring 容器中获取需要使用的对象

不关心对象的创建过程,也就是把创建对象的控制权反转给了Spring框架.

        以前我们在程序中需要对象,都是自己new,例如 new Student对象.

        AOP: Aspect Oriented Programming 面向切面编程

        将程序中的一些公共的非业务的代码分离提前出来,然后在业务代码执行时,给他们横切进来

        使用的动态代理的机制实现,在我们的业务代码,不显示的调用,但是执行业务代码,会通过代理对象,调用非业务代码

       一站式:除了核心的IOC和AOP功能之外,还对数据访问层,web层都有封装,所以是一站式框架

Spring的搭建

        Maven导入spring核心基础jar

在pom.xml文件中创建<dependencies></dependencies>标签,并添加下方代码

<!-- spring-context-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.2.RELEASE</version>
</dependency>

 添加好后入下图所示(我这是之前创建好的所以刚添加后会标红)

字体是红色点击右上角的图标安装并刷新.

        在左边框中右键选中resources,选中new,选择File类,创建spring.xml文件

        创建好的文件是一片空白

        这时我们需要编写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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd ">
 <bean> id = "user" class="com.ff.spring.model.User"></bean>
</beans>

       编写一个Admin实体类


        

        以Admin实体类举例:

<bean id="admin" class="com.zhu.springpro.model.Admin" scope="prototype"></bean>

        以上步骤都完成后,在java中创建一个Test文件,测试spring

        输出结果(这里是地址是因为我们没有在具体实现类中实现ToString()方法) 

       

        代码实现

 ApplicationContext applicationContext =  new ClassPathXmlApplicationContext("spring.xml");
           Admin admin =  (Admin) applicationContext.getBean("admin");
           Admin admin1 = applicationContext.getBean("admin",Admin.class);

        System.out.println(admin);
        System.out.println(admin1);

         对于新面孔ClassPathXmlApplicationContext

        它是spring框架中的一个具体的实现类,负责生成,管理程序中的对象 可以看做一个容器,所以一般把spring框架也称为spring容器,或者叫做IOC容器

         new ClassPathXmlApplicationContext("spring.xml"); getBeen("admin");

        从spring框架(容器)中获取到需要的对象

Spring Bean 管理

        从名字来看,似乎与我们上方的<bean>标签有关

        其实没错,bean对象

        由于把对象交给spring管理后,spring会对对象进行功能的增强,所以在spring框架中生成的对象,统一称为bean对象.

        区分这个对象是我们自己new的还是spring框架生成的

        spring中 bean管理有两种方式,所以我们将介绍两种方式(水字数)

1.基于xml配置方式

        在上方可能会有不少小伙伴有疑问<bean></bean>标签是什么意思?

        这里使用bean标签,是用来配置需要让spring管理的类

                id=“对象名称,可以在getBean中获得spring生成的对象

                class=”需要让spring管理的类的地址

                scope=“配置bean的作用域”

                scope=”singleton“ 单例的 在spring框架启动时就创建,而且始终只创建一个对象                  scope="prototype" 原型的(多例的) 在每次或的对象时,创建一个新的对象

Xml配置方式依赖注入

        指 Spring 创建对象的过程中,将对象依赖属性(简单值,集合,对象)通过配置设置给该对象。 实现IOC需要DI做支持

        注入的方式:

                     通过属性注入,属性的set 方法注入

        在之前创建好的spring.xml文件中添加下方代码

<bean id="admin" class="com.ffyc.springpro.model.Admin" scope="prototype">
    <property name="account" value="admin"></property>
    <property name="password" value="111"></property>
</bean>

        test文件中的代码不改变,得出结果

      

          
                        构造方法注入

        在java中分别创建AdminDao文件和AdminService文件,分别对应程序执行时的dao层和service层.

        在AdminDao类中创建saveAdmin()方法

        在AdminService类中创建saveAdmin()方法

        在不改变test文件,结果输出为

2.基于注解方式

        开启spring注解扫描功能 指定扫描的包

        在resources文件中创建spring.xml文件

        并编写spring配置文件

        创建好的spring.xml文件如下图所示

         将下面这行代码输入

 <context:component-scan base-package="com.zhu.springpro"> </context:component-scan>

         会出现下面这种情况,不要慌张这是因为没有在xmlns中引入context地址,将鼠标移至context上

 

         会弹出提示,点击红色提示会自动置入xmlns   (若没有提示,将以下代码代替<beans>标签即可)

<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
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
                           https://www.springframework.org/schema/context/spring-context.xsd">

        这时,spring.xml文件就配置好了,我们可以得到下方画面(注意这里可以使用context是因为之前已经提前下载好了spring-context的jar包)

 

         再打开之前创建好的Admin文件

        在类声明上方加上注解

@Component(value = "admin")
@Scope(value = "prototype")

         这里的两行注释等同于xml中<bean id="admin" class="com.zhu.springpro.model.Admin" >

         在AdminDao类声明上方加注解

@Repository(value = "adminDao")

        这里的@Resource

         是java语言中提供的语言注解标签 也是添加在属性上,不需要写set方法 注入的值也是不能为空的  也可以通过类型查找要注入的对象

        @Resource 也可以通过对象名查找要注入的对象 

        并在saveAdmin()方法中加入下方代码

List<Admin> admins = jdbcTemplate.query("select * from admin", new RowMapper<Admin>() {
    public Admin mapRow(ResultSet resultSet, int i) throws SQLException {
       Admin admin = new Admin();
       admin.setAccount(resultSet.getString("account"));
       admin.setPassword(resultSet.getString("password"));
        return admin;
    }
});
System.out.println(admins);

       注意:这里需要与数据库进行交互,所以需要在pom.xml文件中下载有关mysql的jar包

<!--mysql-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.16</version>
</dependency>

          相同的,在AdminService类声明上方加上注解

@Service(value = "adminService")

         @Service作用与@Resource相同,只是为了后续扩展功能,在不同的层使用不同的注解标记

        并在AdminService类中创建AdminDao对象,并创建set()和get()方法

        这里@Autowired 是spring框架提供的注解

         用于在属性和属性的set方法上,如果写在属性上,set方法都可以不需要

         默认情况下,要注入的值是不能为空的 required = true 注入空会报错

        自动注入有两种值的匹配方式

                1.通过属性类型的查找

                2.通过对象的名字查找 @Qualifier(value = "adminDao")

        再创建一个test2文件,输入以下测试代码

ApplicationContext applicationContext =  new ClassPathXmlApplicationContext("spring.xml");
   AdminService adminService =  applicationContext.getBean("adminService", AdminService.class);
   adminService.saveAdmin();

        测试结果如下

        这里最后的结果是我之前在数据库写好的数据 

注解与 XML 的对比

        经过这么多的内容了解,让我们来总结一些注解与xml之间的优缺点

        注解优点: 方便,直观,高效(代码少,没有配置文件的书写那么复杂)。

        注解缺点:以硬编码的方式写入到 Java 代码中,修改是需要重新编译代码的。

        xml 优点是: 配置和代码是分离的,在 xml 中做修改,无需编译代码,只需重 启服务器即可将新的配置加载。

        xml 的缺点是:编写麻烦,效率低,大型项目过于复杂。

        

        今天的spring总结先告一段落,如果感觉不错,可以点个关注和赞,稍后还会继续进行补充

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

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

相关文章

学习区块链?看我就够了!

写在前面&#xff0c;本文提到的所有书籍资源&#xff0c;都提供免费下载地址 内含pdf&#xff0c;epub,mobi等格式 一.区块链&#xff1a;定义未来金融与经济新格局 以区块链技术为核心构建的价值互联网 将深刻改变未来的金融与经济格局 文明向前发展&#xff0c;有些成果的…

Linux基础软件-共享存储nfs

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux进阶部分又分了很多小的部分,我们刚讲完了Linux日常运维。讲的那些东西都算是系统自带的&#xff0c;但是Linux作为一个…

大模型之二十七-语音识别Whisper实例浅析

Whisper简介 Whisper是OpenAI于2022年9月开源的一个多语种识别模型&#xff0c;目前支持99种语言&#xff0c;是目前性能最好的开源多语种识别ASR大模型&#xff0c;第一版版使用了68万小时标注好的语料预训练模型&#xff0c;而large-v3的标注数据超过了500万小时&#xff0c…

QL5010-16-ASEMI逆变焊机专用整流桥QL5010

编辑&#xff1a;ll QL5010-16-ASEMI逆变焊机专用整流桥QL5010 型号&#xff1a;QL5010 品牌&#xff1a;ASEMI 封装&#xff1a;KBPC-4 批号&#xff1a;2024 类型&#xff1a;整流模块 电流&#xff1a;50A 电压&#xff1a;1600V 安装方式&#xff1a;直插式封装 …

(2)Studio 5000 Logix Emulate仿真使用方法

Studio 5000 Logix Emulate仿真使用方法 引言&#xff1a;首先要安装好Studio 5000 logix emulate&#xff0c;这个软件也是需要授权的。还需要注意仿真器与studio 5000之间版本的对应&#xff0c;studio5000的版本需要小于仿真器版本。 打开Studio 5000 logix emulate&#x…

Lombok组件的使用

什么是Lombok Lombok是一个Java库&#xff0c;能自动插入编辑器并构建工具&#xff0c;简化Java开发。通过添加注解的方式&#xff0c;不需要为类编写getter或eques方法&#xff0c;同时可以自动化日志变量。 Lombok的使用 使用Lombok需要的开发环境JavaMavenIntelliJ IDEA或…

游戏开发设计模式之桥接模式

目录 桥接模式在游戏开发中的具体应用案例是什么&#xff1f; 如何在Unity或Unreal Engine中实现桥接模式以提高游戏引擎与场景的灵活性&#xff1f; 桥接模式与其他设计模式&#xff08;如适配器模式、模板方法模式&#xff09;在游戏开发中的比较优势是什么&#xff1f; …

【Verilog 数字系统设计教程】Verilog 基础:硬件描述语言入门指南

目录 摘要 1. 引言 2. Verilog 历史与发展 3. Verilog 基本语法 4. Verilog 模块与端口 5. 组合逻辑与时序逻辑 6. 时钟域与同步设计 7. 测试与仿真 8. Verilog 高级特性 任务&#xff08;Tasks&#xff09; 函数&#xff08;Functions&#xff09; 多维数组 结构体…

MinGW-w64 x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z

MinGW-w64 x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z 安装包 链接: https://pan.baidu.com/s/1G8SDlDcBtNU4TCBuLL9XYw?pwdv587 提取码: v587 是7z文件&#xff0c;解压即可&#xff0c;自动得到一个mingw64文件夹。 自存&#xff0c;应该能用

多态(虚构的整体,具体的个体)(多态的基本概念/多态的原理剖析/纯虚函数和抽象类/虚析构和纯虚析构)

多态的基本概念 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; // 多态的基本概念 // 多态分为静态多态和动态多态 // 静态多态&#xff1a; 函数重载还运算符重载属于静态多态&#xff0c;服用函数名 // 动态多态&#xff1a; 派生派和虚函…

电商走向“未来化”,“含金量”几何?

2018年&#xff0c;史蒂文斯皮尔伯格导演的《头号玩家》一经上映&#xff0c;就带火了虚拟现实概念。电影中&#xff0c;男主角戴上VR眼镜、感知手套&#xff0c;穿上触感套装&#xff0c;从视觉、听觉到触觉&#xff0c;瞬间切换至全新的世界。 电影《头号玩家》剧照 时隔六年…

如何使用ssm实现图书管理借阅系统

TOC ssm301图书管理借阅系统jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。…

构建在线教育系统源码:企业培训APP开发的技术指南

在数字化浪潮的推动下&#xff0c;企业培训正从传统课堂转向在线教育模式。构建一个高效、稳定且可扩展的在线教育系统源码&#xff0c;已经成为开发企业培训APP的关键。在本文中&#xff0c;我们将深入探讨构建在线教育系统源码的核心技术&#xff0c;并提供一份开发企业培训A…

免费分享一套SpringBoot+Vue个人理财管理系统【论文+源码+SQL脚本】,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue个人理财管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringbootVue个人理财管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术在管理上越来越深入而广泛的应用&am…

记录一次polarDB出现Waiting for table metadata lock

在业务实践中&#xff0c;常见的 DDL 阻塞 原因是由于无法获取到 MDL 锁&#xff0c;即 Waiting for table metadata lock 。借助 metadata_lock 表&#xff0c;可以快速定位到 DDL 阻塞的原因。 元数据锁&#xff08;MDL&#xff09; MDL加锁过程是系统自动控制&#xff0c;无…

京东商品信息快速获取:API返回值实战教程

京东商品信息快速获取通常通过调用京东的API接口来实现&#xff0c;特别是针对商品搜索和商品详情等需求。以下是一个基于京东商品信息API返回值的实战教程&#xff0c;帮助您快速理解和利用这些API返回的数据。 1. 注册与认证 首先&#xff0c;您需要在京东开放平台&#xf…

Python爬虫的这几个实用技巧你都知道吗?

Python爬虫是一种强大的网络数据抓取工具&#xff0c;通过编写Python脚本来自动化地访问网页、提取所需信息并保存到本地。以下是Python爬虫的8大实用技巧&#xff0c;详细讲解如下&#xff1a; 1. 发送HTTP请求 基本方法&#xff1a;使用requests库发送HTTP请求是Python爬虫…

【学术会议征稿】第五届机械工程、智能制造与自动化技术国际学术会议(MEMAT 2024)

第五届机械工程、智能制造与自动化技术国际学术会议&#xff08;MEMAT 2024&#xff09; The 5th International Conference on Mechanical Engineering, Intelligent Manufacturing and Automation Technology 目前&#xff0c;我国自动化技术随着科学技术水平的不断提高已经…

责任链设计模式详解

责任链设计模式详解 一、定义 责任链设计模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为设计模式&#xff0c;它允许多个对象有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合。这种模式将这些对象连接成一条链&#xff0c;并沿着…

麒麟kylin v10 sp3 升级glibc2.28 到 2.31

1. 下载glibc 2.31 wget https://mirrors.aliyun.com/gnu/glibc/glibc-2.31.tar.gz 2.解压 tar -xf glibc-2.31.tar.gz cd glibc-2.31 mkdir build && cd build 3.修改 Makefile 125行添加一行 yum reinstall libxcrypt -y scripts/test-installation.pl 128行修…