Spring-简介

news2024/9/29 9:29:01
一、概念

在向读者描述Spring时,笔者不打算从某处粘贴一段常见的概念性文字糊弄完本专栏的第一篇文章,而是用易于理解的话向读者指出几个重点。

(1)是框架。何谓框架?就像搭房子一样,框架就如同是墙体结构,房地产开发商将墙体结构给客户搭建好了,至于细节的装修,比如刷什么颜色的漆,选用什么样的家具、什么颜色的灯光等等这些都将交由客户自己完成。Spring类似于此,它简化了Java程序员“搭建一套房子”的工作。Java程序员只需要引入这样一个框架,然后做一些“装修”的工作,就能快速地对外提供服务了。至此,我们再次阅读Spring官网的第一段话,是不是更能明白Spring框架出现的意义呢?一句话总结:简化了应用开发。

(2)Spring的优势是?我们在此仅仅先用一句话分别介绍几个优势,要深刻地理解,还需要后续持续的学习。

1、解耦:IoC通过依赖注入等方式,将对象的依赖关系从硬编码中解耦出来,降低了代码的耦合度,使得代码更加灵活和可维护。IoC,Inversion of Control,控制反转。所谓控制,即创建对象的控制权,所谓反转,指过去创建对象的控制是由开发者自己掌握的,现在则交给了Spring框架。

2、AOP:Aspect-Oriented Programming,面向切面编程。弥补了OOP的缺陷。

3、声明式事务:是否还记得我们使用JDBC时如何进行事务控制呢?我们需要通过Connection对象来setAutocommit为false,表示事务打开,再根据执行结果来进行commit或rollback。显然这个操作太繁琐了,那么期待Spring是如何优雅地解决这一问题吧。

4、集成了其它优秀的框架:如SpringMVC,MyBatis等,集成了其它框架的能力会让我们的工作更加省心。

5、降低JavaEE API的使用难度:例如JDBC的使用,我们的通用操作是注册驱动,获取连接,获取执行SQL对象等,执行SQL,处理查询结果等。而在Spring框架中,则集成了许多模板工具,如JDBCTemplate,针对Redis提供了RedisTemplate类。

二、快速使用

既然上面提到Spring框架是如此的便捷,那么我们现在来快速上手一下Spring吧。

(1)引入Spring上下文依赖spring-context,junit用于测试

        <!--基于Maven依赖传递性,导入spring-context依赖即可导入当前所需所有jar包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.1</version>
        </dependency>
        <!--junit测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

(2)定义一个类,并提供一个方法

public class HelloWorld {

    public void sayHello() {
        System.out.println("hello, spring");
    }
}

(3)定义配置文件,将第(2)步的类加入到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:将对象交给IOC容器来管理
        id:bean的唯一标识,不能重复
        class:设置bean对象所对应的类型
    -->
    <bean id="hello-world" class="com.bylearning.spring.pojo.HelloWorld" />
</beans>

(4)我们在测试类中看看效果

import com.bylearning.spring.pojo.HelloWorld;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class HelloWorldTest {

    @Test
    public void test() {
        // 获取IOC容器
        ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 获取IOC容器中的bean
        HelloWorld helloworld = (HelloWorld)ioc.getBean("hello-world");
        HelloWorld helloworld1 = (HelloWorld)ioc.getBean("hello-world");
        System.out.println(helloworld);
        System.out.println(helloworld1); // 两个地址相同,验证Spring容器创建对象默认是单例模式
        helloworld.sayHello();
    }
}

至此,我们就完成了Spring的初探:将对象交给Spring容器来管理,并通过getBean方法向容器索要一个对象。

注意到获取IoC容器时,我们使用了new ClassPathXmlApplication(String xmlFileName)方法,这个方法顾名思义,会读取在类路径下一个xml文件,我们在后面的章节中会更详细地阐述。以及getBean(String beanId)方法,还有通过类获取Bean的方法,我们也在后面介绍。在这里大家仅需快速了解Spring的基本使用即可。

我们多说几句Spring创建对象的逻辑是:Spring框架通过读取xml文件,根据id标识获得了Bean的全限定名,通过反射创建出Bean对象并返回对象。

了解完这些,我们似乎对Spring有了些模糊的认识,接下来让我们走近Spring,首先来了解一下Spring的配置文件。

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

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

相关文章

HCIP复习课(重发布实验)

1、ip配置&#xff1a; R1&#xff1a; R2&#xff1a; R3&#xff1a; R4&#xff1a; 2、rip&#xff0c;ospf配置&#xff1a; R1&#xff1a; R2&#xff1a; R3&#xff1a; R4&#xff1a; 3、重发布配置&#xff1a; R1&#xff1a; R2&#xff1a; R3&#xff1a; 检…

Docker网络配置与自定义IP容器通信

目录 前言 一、docker网络配置 1. bridge 虚拟网桥 2. host 网络模式 3. none 网络模式 4. 自定义container网络模式 二、自定义IP容器通信 1. 自定义IP 2. 创建所需容器&#xff08;mysql&#xff0c;tomcat&#xff09; 3. 准备项目资源 4. 构建Nginx实现负载均衡…

内推机会来啦!网络、云计算、数据库岗位招人,最高25K/月!

PaaS工程师任职要求&#xff1a; 1.熟练掌握Java开发语言&#xff0c;具备编程开发能力和脚本维护能力&#xff1b;懂微服务&#xff08;springcloud&#xff09;&#xff1b;熟悉JavaScript语言。 2.熟悉docker镜像原理&#xff0c;dockerfile制作命令与流程&#xff1b;熟悉K…

独立站怎么建设对seo好?

现如今市面上就有不少开源的建站程序可供挑选&#xff0c;哪怕你不懂技术&#xff0c;不懂代码&#xff0c;也能建自己的独立站&#xff0c;效果比不少所谓的用自己技术开发的站都要好&#xff0c;本身做一个网站不难&#xff0c;但你做网站的目的是什么&#xff1f;是为了在搜…

常见の算法

前言本文主要使用Java 什么&#xff0c;是快乐星球#&#xffe5;%……什么是算法&#xff1f; 算法是一组完成任务的指令。任何代码片段都可视为算法&#xff0c;但我们主要介绍常见算法 一、引入——二分查找 二分查找是一种算法&#xff0c;其输入是一个有序的元素列表。如…

51单片机ESP8266

一、MQTT透传AT固件 安信可提供的烧录WiFi固件工具&#xff1a; 链接: https://docs.ai-thinker.com/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B72 安信可提供的固件库链接: https://docs.ai-thinker.com/%E5%9B%BA%E4%BB%B6%E6%B1%87%E6%80%BB 经过测试&#xff0c;选择这个不可以…

6.jmeter非GUI命令及Beanshell组件

一、非GUI&#xff08;界面&#xff09;命令详解 1. -n 使用非gui方式&#xff0c;不能单独使用&#xff0c;必须和-t&#xff08;指定jmeter的脚本&#xff09;一起用。 #cmd命令行模式下&#xff0c;进入存放测试jmx文件的目录下 jmeter -n -t hello.jmx只会生成一个log日…

linux clickhouse 安装

1、官网下载clickhouse安装包 下载地址&#xff0c; clickhouse分lts和stable版本&#xff0c;lts是长期版本&#xff0c;一般选择安装lts版本。 其中clickhouse-server是clickhouse服务&#xff0c;就是用来访问数据存储数据&#xff0c;clickhouse-client是用来通过命令访问数…

Windows11 鼠标拖动文件到CMD控制终端窗口无效,无法显示具体文件路径

对于某些用户来说&#xff0c;他们可能会在Windows 11上遇到鼠标拖动文件到CMD控制终端时&#xff0c;无法显示具体文件路径的情况。 系统更新&#xff0c;习惯基础操作无效了&#xff0c;真的有点烦&#xff0c;不会提问就无计可施。 果然善于提问&#xff0c;才有果子吃 问…

Java日期和时间学习记录2

1、Java的LocalDate类当前时间往未来几天和过去时间几天 import java.time.LocalDate;public class Main {public static void main(String[] args) {// 获取当前日期LocalDate currentDate LocalDate.now();System.out.println("当前日期&#xff1a;" currentDa…

Go 定时器:如何避免潜在的内存泄漏陷阱

这篇文章将探讨的是 Go 中如何高效使用 timer&#xff0c;特别是与select 一起使用时&#xff0c;如何防止潜在的内存泄漏问题。 引出问题 先看一个例子&#xff0c;我们在 Go 中的 select 使用定时器&#xff0c;实现为消息监听加上超时能力。 核心代码&#xff0c;如下所示…

java安装,从java1.8升级到java11.0,java,javac,javaw,javaws,jdk,jre

最近在学习 PyFlink&#xff0c;需要安装Java11环境&#xff0c;但是本机已经安装了java1.8&#xff0c;在升级的过程中遇到了一些问题&#xff0c;在这里记录一下。 windows下安装JDK11 下载JDK11&#xff1a;https://www.oracle.com/java/technologies/downloads/#java11-w…

MyBatis入门基础篇

MyBatis基础篇 MyBatis是一款优秀的特久层框架&#xff0c;用于简化JDBC开发。其是Apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。由于MyBatis中的大部分API参数与数据库事务息息相…

详细介绍 Go 中如何实现 bitset

文章目录 bitset 结构元素位置代码实现构造函数BitSet 的方法基础方法containsclearadd 集合方法computeSize方法定义intersectuniondifference 遍历集合的元素总结 最近尝试在 B 站录些小视频&#xff0c;我的 B 站主页。录视频当是为了彻底搞懂某个知识点的最后一步吧&#x…

【C++】stack、queue的使用及模拟实现

目录 一、stack1.1 stack的使用1.2 stack的模拟实现 二、queue2.1 queue的使用2.2 queue的模拟实现 一、stack 1.1 stack的使用 stack是一种容器适配器&#xff0c;它的特点是后进先出&#xff0c;只能在容器的一端进行插入和删除操作。 stack的使用很简单&#xff0c;主要有…

代码随想录算法训练营31期day4,力扣24+19+02.07+142

24&#xff0c;动指针 class Solution { public:ListNode* swapPairs(ListNode* head) {//建立虚拟头结点auto dummynew ListNode(-1);dummy->nexthead;for(auto pdummy;p->next&&p->next->next;){auto ap->next;auto ba->next;p->nextb;a->n…

图像旋转角度计算并旋转

#!/usr/bin/python3 # -*- coding: utf-8 -*- import cv2 import numpy as np import timedef Rotate(img, angle0.0,fill0):"""旋转:param img:待旋转图像:param angle: 旋转角度:param fill&#xff1a;填充方式&#xff0c;默认0黑色填充:return: img: 旋转后…

【保驾护航】HarmonyOS应用开发者基础认证-题库

通过系统化的课程学习&#xff0c;熟练掌握DevEco Studio&#xff0c;ArkTS&#xff0c;ArkUI&#xff0c;预览器&#xff0c;模拟器&#xff0c;SDK等HarmonyOS应用开发的关键概念&#xff0c;具备基础的应用开发能力。 考试说明 1、考试需实名认证&#xff0c;请在考前于个…

林浩然的政治学奇幻漂流——幽默诙谐解读马基雅维利

林浩然的政治学奇幻漂流——幽默诙谐解读马基雅维利 Lin Haoran’s Whimsical Exploration of Machiavelli’s Political World 在一个阳光明媚的周末&#xff0c;我们的主人公林浩然同学决定穿越历史长河&#xff0c;踏上一场充满智识与笑声的探索之旅&#xff0c;目的地是文艺…

NineData和泽拓数据库产品Klustron完成产品兼容互认证

近日&#xff0c;云原生智能数据管理平台NineData和泽拓昆仑分布式数据库产品Klustron完成产品兼容互认证。经过严格的联合测试&#xff0c;双方软件完全相互兼容、功能完善、整体运行稳定且性能表现优异。 本次玖章算术与泽拓科技的携力合作&#xff0c;在双方共同的努力下&a…