快速入门Spring

news2024/11/15 23:59:57

目录

为什么要学Spring:

Spring框架诞生的背景:

Spring是什么:

接下来我们就要解决Spring怎么用这个问题

BeanFactory快速入门 IOC思想的体现

BeanFactory快速入门 DI思想的体现


开始学Spring时我们要了解以下几个问题

为什么要学习Spring?

Spring是什么?

Spring怎么用?

Spring在什么时候用?

针对这几个问题我们开始学习Spring

为什么要学Spring:

众所周知Spring是一个框架,那什么是框架呢?

框架是一种结构体,它具备通用性,且能快速实现产品的功能。

例子:建筑框架、写作文的文章结构框架等

Spring框架诞生的背景:

多年前web开发过程中遇到的重大问题。基于三层模型开发时,在业务逻辑的代码中能看到很多的手动new对象的代码,这样会造成高度耦合。

为了解决这个问题,我们就需要学习Spring

Spring是什么:

简单的来讲就是如下图:

我们可以把Spring看成一个工厂,程序在工厂中获取Bean对象。

通过上面的案例,很明显的可以看出来,我们引入了一个很重要的环节,那就是工厂;但是这样就没有问题了吗?

大家仔细思考一下几个问题:

1、工厂怎么知道我要哪个对象呢?或者说我如何告诉工厂我要哪个对象呢?

2、Bean对象之间的关系如何维护呢?比如Abean对象需要用C Bean对象,那么我找工厂要了A Bean对象还要去设置C Bean对象吗?

..............................................................

Spring框架中的几种核心思想出来了!!!!

记住,不管学什么框架,存在即合理,一款框架的出现一定是为了解决某一类问题而产生。所以学某项框架或者技术前一定请熟悉它的技术背景。不要为了写代码而写代码。

接下来我们就要解决Spring怎么用这个问题

第一步:

配置pom.xml:

特别提醒:spring 6.0版本要求jdk的版本为17或以上;如果你的jdk版本是低于17的,请降低spring的版本,以免后面报错(或者升级jdk的版本到17及以上)。我的jdk是1.8的,所以选择降级spring的版本。

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

第二步:编写bean.xml文件

在resource文件中配置bean.xml文件如图:

第三步:编写bean类

package com.frank;

public class HelloWorld {
    String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

第四步:编写测试代码来说明spring的使用。

package com.frank;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
    public static void main(String[] args) {
        // 从类路径下加载bean配置文件,得到一个容器对象
        ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("bean.xml");
        // 使用容器对象里的getBean方法,通过配置文件里面的唯一标识id得到该bean对象
        HelloWorld helloWorld = (HelloWorld) app.getBean("helloWorld");
        // 使用得到的bean对象调用方法,如果能得到值说明对象的确由spring创建好了
        String message = helloWorld.getMessage();
        System.out.println(message);
    }
}

运行程序后,我们会发现,在测试的代码中我们并没有在手动的去通过new创建对象了,而是直接管spring容器对象要;从控制台打印出来的结果来看,的确拿到了message的值,这就说明helloworld对象的确创建成功了,而且把HelloWorld类的message属性给赋了值。

BeanFactory快速入门 IOC思想的体现

IOC思想也叫“控制反转”

讲spring技术背景的时候,利用工厂模式来解决了解耦问题,但是没有用代码来使用说明,这个工厂到底长什么样子,我们还不知道,接下来,我们就一起来使用BeanFacory工厂来实现管理Bean对象的例子。话不多说,上代码。

前面的步骤和第一个spring demo一样,我们一起来回顾一下

第一步:引入spring的jar包(还记得怎么引入的吗?)

第二步:编写bean配置文件(bean.xml还记得里面写什么吗?)

第三步:编写测试类找容器要对象(第三步有点不一样了,我们不找容器要,而是找工厂要)

前面两步的代码都一样,直接看第三步的代码

package com.frank;

import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.Resource;

public class MainApp {
    public static void main(String[] args) {
        // 创建bean工厂对象
        DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
        // 创建一个读取配置bean文件的对象
        XmlBeanDefinitionReader definitionReader = new XmlBeanDefinitionReader(beanFactory);
        // 加载配置bean文件并交给bean工厂对象
        definitionReader.loadBeanDefinitions("bean.xml");
        // 根据bean配置文件里面的唯一标识id获取bean对象
        HelloWorld helloWorld = (HelloWorld)beanFactory.getBean("helloWorld");
        String message = helloWorld.getMessage();
        System.out.println(message);
    }
}

BeanFactory快速入门 DI思想的体现

DI也叫依赖注入,这是咋回事呢?

首先我们来还原一个大家都很熟悉的场景,三层模型中service的实现类调用dao层接口里面的方法

原来的做法代码要这么写:

话不多说,上代码展示说明:

package service;
import dao.StudentDao;
public class StudentServiceImp {

    StudentDao sd;

    public void updateStudent(){
            sd.update();
    }

    public void setSd(StudentDao sd) {
        this.sd = sd;
    }
}
package dao;
public class StudentDao {
    public void  update(){
        // 操作数据库的代码
    }
}

bean.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="studentService" class="service.StudentServiceImp">
        <property name="sd" ref="studentDao"/>
    </bean>

    <bean id="studentDao" class="dao.StudentDao">
    </bean>

</beans>

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

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

相关文章

深入理解滑动窗口算法及其经典应用

文章目录 什么是滑动窗口&#xff1f;经典题型分析与讲解**1. 长度最小的子数组****2. 无重复字符的最长子串****3. 最长重复子数组****4. 将x减到0的最小操作数**5. 水果成篮 (LeetCode 904)6. 滑动窗口最大值 (LeetCode 239)7. 字符串中的所有字母异位词 (LeetCode 剑指 Offe…

SAP S4HANA 2023 FPS01 FAA虚拟机发布了

SAP S4HANA 2023 FPS01 FAA虚拟机发布了。 系统不再需要修改虚拟机日期了&#xff0c;提供最高长达三年的许可&#xff0c;业务财务做账都是真实的时间&#xff01; 该虚拟机版本优点&#xff1a; 新版的一键启动脚本&#xff0c;3分钟就能启动完成。 内存加载 80GB 就可以启动…

二叉树检验:算法详解

问题描述 /** 检查二叉树是否为有效的二叉搜索树有效的二叉搜索树满足左子树的节点值都小于根节点值&#xff0c;右子树的节点值都大于根节点值并且左右子树也必须是有效的二叉搜索树param root 二叉树的根节点return 如果二叉树是有效的二叉搜索树&#xff0c;则返回true&…

当AI成为你的私人医生,与AI“医”路同行的奇妙体验

“ 从挂号到诊疗&#xff0c;再到后续的健康管理&#xff0c;人工智能&#xff08;AI&#xff09;正以一种全新的方式融入我们的生活。上海市第一人民医院的创新实践&#xff0c;便是这一变革的生动注脚。 ” AI就医助理&#xff1a;从“助手”到“伙伴” 当你踏入医院大门…

01-容器基础:从进程说起

本章内容包括&#xff1a; 容器是什么样的一种技术容器的边界是怎么实现的容器支持哪些Namespace容器的本质是什么虚拟机与容器 在开始本章之前&#xff0c;我希望你能理解这样一个道理&#xff1a;容器本身没有价值&#xff0c;有价值的是"容器编排"。 那么容器究竟…

SD-WAN降低网络运维难度的关键技术解析

为什么说SD-WAN&#xff08;软件定义广域网&#xff09;大大降低了网络运维的复杂性&#xff0c;主要是因为它的智能路径选择、应用识别和链路质量监测这三个核心技术。这几项在SD-WAN中尤为重要的技术&#xff0c;它们共同作用&#xff0c;提升了整体网络性能&#xff0c;为网…

软件测试——自动化测试博客系统

代码gitee仓库地址——SoftwareTest 测试思路 注意用例之间的依赖 通过clear保证输入框内没有信息通过刷新保证输入框内没有信息不要在中间释放driver 登录成功 输入正确的账户密码后会跳转页面&#xff0c;可以检测是否能抓取到跳转页面上的与登录页面不同的某个元素通过…

【MySQL】黑马 MySQL基础 笔记

文章目录 概述数据模型关系型数据库 SQL通用语法分类DDL数据库操作表操作-查询表操作-创建表操作-数据类型表操作-修改 DML添加数据修改数据删除数据 DQL基本查询&#xff08;SELECT、FROM&#xff09;条件查询&#xff08;WHERE&#xff09;聚合函数(count、max、min、avg、su…

秒懂C++之红黑树

目录 前言 一. 红黑树的概念 二. 红黑树的性质 三. 红黑树的插入 插入代码 四. 红黑树的验证 InOrder IsBalance 五. 全部代码 前言 红黑树中涉及到了AVL树旋转的特点&#xff0c;如果对旋转不太了解可以去这篇文章&#xff1a;秒懂C之AVL树-CSDN博客 一. 红黑树的概…

ZNS SSD是不是持久缓存的理想选择?

随着数据量的增加和技术的进步&#xff0c;对于高效、可靠的存储解决方案的需求日益增长。传统的基于块的SSD虽然具有成本效益和持久性的优点&#xff0c;但在处理写密集型和更新密集型工作负载时存在局限性。 NAND闪存的特点是数据只能按页&#xff08;例如4KiB&#xff09;写…

【国赛】【美赛】【五一杯】【电工杯】【华数杯】【亚太杯】······各赛事历年优秀论文+真题分享

今天继续给大家分享十分重磅的资料哦&#xff0c;数学建模各大竞赛的资料汇总&#xff0c;可能很多小伙伴平时进行某个比赛的资料搜索的时候会发现&#xff0c;我们想要的这个比赛的资料有时候非常难搜索到&#xff0c;搜索23年&#xff0c;显示21年的&#xff0c;搜索小美赛&a…

Prometheus 监控指标采集

原文链接&#xff1a;https://www.hezebin.com/article/66b3b1fb4379b36dec11a1a1 前言 在现代分布式系统和云原生环境中&#xff0c;为了确保复杂的分布式系统和服务的高可用性、可靠性和性能&#xff0c;通常采用实时可视化监控和分析&#xff0c;实现故障快速响应、资源优…

单片机驱动彩屏最简方案:单片机_RA8889最小开发板驱动控制TFT彩屏介绍(二)硬件电路设计

本文介绍使用单片机RA8889来驱动和控制彩屏的最小方案。文章从RA8889的架构功能、硬件电路设计及软件设计三个方面来说明。 小编已发布多篇文章介绍了单片机RA8889来驱动控制彩屏&#xff0c;但是仍有不少单片机玩家可能对驱动彩屏还不算熟悉&#xff0c;在此加推一个短篇介绍…

机器学习-随机森林(全网最详解)

文章目录 一、简介1.定义2.基本原理3.优缺点4.应用场景 二、代码运用1.数据预处理2.模型训练3.模型评估4.绘制特征排名 三、总结 一、简介 1.定义 随机森林&#xff08;Random Forest&#xff09;是一种集成学习方法&#xff0c;它通过构建多个决策树并将它们的预测结果进行汇…

公司电脑被监控有什么表现?电脑监控VS员工隐私,员工合理摸鱼需知!职场小贴士为您解答!

公司电脑被监控有什么表现&#xff1f; 数字化办公日益普及&#xff0c;许多企业为了保障信息安全、提升工作效率&#xff0c;会选择在公司电脑上安装监控软件。这一举措在提升企业管理效能的同时&#xff0c;也引发了关于员工隐私与合理工作界限的讨论。本文将为您解析公司电…

k8s教程

1. k8s框架 - kubernetes的架构- Control Plane: 控制K8S集群的组件。- Api Server: 集群的访问入口。- etcd: 存储集群的数据。一般情况下&#xff0c;只有API-SERVER会访问.- Control Manager: 维护集群的状态。- Scheduler: 负责Pod的调度功能。- Wor…

防止拷贝电脑资料?【三种数据拷贝的详细方法分享!】

防止电脑资料被拷贝通常是指采取措施来保护敏感或专有信息不被未经授权的用户复制或传播。 这里我理解您可能想要了解的是如何防止数据被拷贝的方法&#xff0c;而不是进行数据拷贝的方法。 下面是一些常见的防止数据拷贝的策略和技术&#xff1a; 1. 物理安全控制 锁屏或密…

一篇讲完自动化基础-Python【万字详细讲解】

​ ​ 您好&#xff0c;我是程序员小羊&#xff01; 前言 这篇文章主要学习Python的语法&#xff0c;为后续的自动化打基础 Python requests 接口自动化 Python selenium web 自动化 Python appium移动端自动化(手机 app) 这篇文章分六个阶段百分比进行划分&#xff0c;到时…

Elasticsearch:使用 semantic_text 进行语义搜索

警告&#xff1a;截止 8.15 版本&#xff0c;此功能处于测试阶段&#xff0c;可能会发生变化。设计和代码不如官方 GA 功能成熟&#xff0c;并且按原样提供&#xff0c;不提供任何保证。测试版功能不受官方 GA 功能的支持 SLA 约束。 本教程向你展示如何使用 semantic text 功能…