Spring框架:开发者的得力伙伴,魅力何在?

目录

一. Spring介绍 

二. Spring搭建 

三. Spring Bean管理

▐ 管理方式

▐ 依赖注入

四. Spring数据访问层管理

五. Spring集成MyBatis 


                                                                                       海漫浩浩,我亦苦作舟!大家一起学习,一起进步!

一. Spring介绍 

Spring是什么?

Spring 是一个轻量级的, IOC 和 AOP 的一站式 Java 开发框架,是为了简化企业级应用开发而生的。

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

IOC:即 Inversion of Control 控制反转,把创建对象的控制权反转给spring框架。

AOP:即 Aspect Oriented Programming 面向切面编程。将程序中的 一些公共的非业务代码分离提取出来,然后在业务代码执行时,给它们横切进来。使用的动态代理的机制实现,在我们的业务代码,不显示的调用,但是执行业务代码,会通过代理对象,调用非业务代码。

Spring体系结构:

二. Spring搭建 

简单了解Spring之后,让我们来搭建第一个 'Hello World' 吧!

1. 在maven项目中导入spring核心基础 jar包 

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

2. 编写spring配置文件

位置:在resources目录下创建一个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"></beans>

3. 编写一个实体类

4. 在bean添加spring框架需要管理的类

位置:spring配置文件

<bean id="admin" class="com.ffyc.springpro.model.Admin"></bean>

5. 测试

    public static void main(String[] args) {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");Admin admin = applicationContext.getBean("admin", Admin.class);System.out.println(admin);}

三. Spring Bean管理

 管理方式

什么是Bean?

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

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

spring中bean管理有两种方式:

1. 基于xml配置方式

关于bean作用域的两种配置: 

scope="singleton":单例的,在spring框架启动时就创建对象,而且始终只创建了一个对象。默认

scope="prototype":原型的,在每次获得对象时创建一个新的对象。

2. 基于注解方式

开启spring注解扫描功能,指定扫描的包,并在类的上面添加相应的注解标签。

▐ 依赖注入

依赖注入指:在创建对象的时候,为对象中的属性赋值

xml配置方式依赖注入:

 1. 通过属性注入(属性的set方法) 

    <!-- 在spring的配置文件注册需要spring框架管理的类 --><bean id="admin" class="com.ffyc.springpro.model.Admin" scope="prototype"><property name="account" value="admin"></property><property name="password" value="123"></property></bean>

2. 通过构造方法注入

    <!-- 在spring的配置文件注册需要spring框架管理的类 --><bean id="admin" class="com.ffyc.springpro.model.Admin" scope="prototype"><constructor-arg name="account" value="admin"></constructor-arg><constructor-arg name="password" value="111"></constructor-arg></bean>

基于注解方式依赖注入:

1. 开启spring注解扫描

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

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

由于context标签没有定义,所以还需要添加约束:

http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd

添加后的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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="com.ffyc.springpro"></context:component-scan></beans>

2. 在类的上面添加相应的注解标签

注解标签:

@Component( value = "user" ) 等同于 <bean id="user" class=" "></bean>

@Service:通常添加到Service层的类名之上

@Repository:通常添加到Dao层的类名之上

@Autowired:自动注入。用于在属性和属性的set方法上,如果写在属性上, set方法都可以不需要。默认情况下,要注入的值不能为空(required = true)

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

  • 通过属性的类型查找
  • 通过对象的名称查找     @Qualifier(value = " ")

Scope设置:
@Scope( value = "prototype")  原型
@Scope( value = "singleton")   单例

注解与 XML 的对比:

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

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

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

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

四. Spring数据访问层管理

1. 引入 Spring JDBC 模块的依赖配置以及阿里巴巴的数据库连接管理组件 Druid 

        <!-- spring-jdbc--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.2.RELEASE</version></dependency><!--阿里数据源 数据库连接管理组件--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version></dependency>

在企业级应用中,通常需要与数据库进行交互。Spring JDBC 提供了一种高效、可靠的方式来处理数据库操作,适用于各种规模的企业级应用。 

阿里巴巴数据库连接管理对象,负责生成数据库连接对象,以及提供数据库连接池功能。

2. 让spring管理阿里巴巴数据库连接对象

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value=""></property><property name="url" value=""></property><property name="username" value=""></property><property name="password" value=""></property><property name="initialSize" value="10"></property><!--初始化连接数量--><property name="maxActive" value="20"></property><!--最大连接数量--></bean>

五. Spring集成MyBatis 

Spring集成Mybatis其核心是将SqlSessionFactory交由Spring管理,并由 Spring管理对dao接口的代理实现。

创建一个JavaEE项目,导入所需jar包:(这里pom.xml文件中需要引入6个最基本的配置项)

1. 引入mysql组件和mybatis组件

        <!--  mysql组件--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency><!-- mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.2</version></dependency>

2. 引入Spring核心模块配置

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

3.  引入 Spring JDBC 模块的依赖配置

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

4. 引入阿里巴巴的数据库连接管理组件 Druid 

       <!--阿里数据源 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version></dependency>

 5. 引入 Spring 集成 MyBatis 的依赖

        <!-- spring集成mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.1</version></dependency>

配置sqlSessionFactory

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><property name="configLocation" value="classpath:mybatis.xml"></property><property name="mapperLocations" value="classpath:mappers/*Mapper.xml"></property></bean>

指定生成接口代理

    <!-- 生成dao包下所有接口的代理对象 --><bean id="mapperFactory" class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.ffyc.ssm.dao"></property><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property></bean>

最后spring.xml文件的所有配置如图所示: 

这样一来,mybatis中的配置就可以简化许多了:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><settings><!-- 日志 --><setting name="logImpl" value="STDOUT_LOGGING"/><!-- 开启数据库列名与java属性名转换,例如user_name  userName  --><setting name="mapUnderscoreToCamelCase" value="true"/><!-- 全局二级缓存开关 --><setting name="cacheEnabled" value="true"/></settings><typeAliases><!--为类配置别名--><package name="com.ffyc.ssm.model"/></typeAliases></configuration>

                                                          见此彩虹者 好运连连 !               (欢迎大家与我交流)

关注作者,带你领略更多Spring框架的魅力所在!持续更新中......      博主微信:g2279605572




本次的分享就到此为止了,希望我的分享能给您带来帮助,创作不易也欢迎大家三连支持,你们的点赞就是博主更新最大的动力!如有不同意见,欢迎评论区积极讨论交流,让我们一起学习进步!有相关问题也可以私信博主,评论区和私信都会认真查看的,我们下次再见 

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

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

相关文章

2024年最新Java面试宝典系列-Collections集合篇1

Java中的集合类有哪些&#xff1f;它们的特点是什么 List&#xff1a;有序集合&#xff0c;允许重复元素&#xff0c;实现类如ArrayList、LinkedList。Set&#xff1a;无序集合&#xff0c;不允许重复元素&#xff0c;实现类如HashSet、TreeSet。Map&#xff1a;键值对集合&am…

阿里云服务器 篇七:服务器热备份/定时备份

文章目录 系列文章bypy其他备选项目安装bypy使用bypy命令帮助绑定百度账号查看网盘空间大小和账号信息显示在百度网盘中的根目录在百度网盘中创建备份目录百度网盘中的其他文件操作命令从本地目录同步到百度网盘中在云服务器设置定时同步创建云端备份目录为sudo命令做准备创建同…

如何使用ssm实现基于java web的计算机office课程平台设计与实现+vue

TOC ssm277基于java web的计算机office课程平台设计与实现vue 绪论 1.1 研究背景 现在大家正处于互联网加的时代&#xff0c;这个时代它就是一个信息内容无比丰富&#xff0c;信息处理与管理变得越加高效的网络化的时代&#xff0c;这个时代让大家的生活不仅变得更加地便利…

博弈论(Nim游戏的扩展)

公平组合游戏ICG 若一个游戏满足: 1.由两名玩家交替行动; 2.在游戏进程的任意时刻&#xff0c;可以执行的合法行动与轮到哪名玩家无关; 3.不能行动的玩家判负; 则称该游戏为一个公平组合游戏。 NIM博弈属于公平组合游戏&#xff0c;但城建的棋类游戏&#xff0c;比如围棋&…

大刀阔斧改革之后,阅文距离“东方迪士尼”更近了吗?

当前&#xff0c;网文IP的确是“富矿”。中国社会科学院文学研究所发布的《2023中国网络文学发展研究报告》显示&#xff0c;截至2023年底&#xff0c;网络文学IP市场规模2605亿元&#xff0c;同比增长近百亿元。 近日&#xff0c;网文产业中的头部企业阅文集团也披露数据称&a…

虚拟内存和linux(操作系统part1)

一个操作系统的虚拟内存和linux部分知识点的笔记整理&#xff0c;资料大多参考于&#xff1a;小林coding和Javaguide。 虚拟内存的作用 第一&#xff0c;虚拟内存可以使得进程运行内存超过物理内存大小&#xff0c;因为程序运行符合局部性原理&#xff0c;CPU 访问内存会有很…

【iOS安全】iPhone8 iOS14.4.2 越狱教程

环境配置 iPhone 8&#xff1a; 固件版本 iOS 14.4.2 (18D70) 产品类型 iPhone10,1 (A1906) 销售型号 MQ862J/A MacBook Pro&#xff1a; macOS 10.15.7 装有CheckRa1n beta 0.12.4 概述 尝试了几个版本的unc0ver和Taurine&#xff0c;发现都不好使 unc0ver显示unsupported…

Spring Cloud Eureka与Kubernetes的集成:服务发现的混合方案

Spring Cloud Eureka与Kubernetes的集成&#xff1a;服务发现的混合方案 引言 随着微服务架构的流行&#xff0c;服务发现&#xff08;Service Discovery&#xff09;已经成为构建分布式系统的关键组件之一。在分布式系统中&#xff0c;服务实例的数量和位置是动态变化的&…

95.SAP MII功能详解(08)Workbench-Transaction介绍

目录 1.Transaction 2.Properties of transaction 1.Transaction You use transactions to access data from multiple sources and execute processes, which are triggered synchronously or asynchronously.您可以使用事务从多个源访问数据并执行同步或异步触发的流程。…

React Hooks 的使用场景有哪些?

React Hooks是React 16.8引入的一项特性&#xff0c;它允许你在不编写类组件的情况下使用state和其他React特性。以下是React Hooks的一些主要使用场景&#xff1a; 状态管理&#xff1a;使用useState Hook在函数组件中添加本地状态。 副作用处理&#xff1a;使用useEffect Ho…

代码随想录——两个字符串的删除操作(Leetcode 583)

题目链接 动态规划 思路&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j]&#xff1a;以i-1为结尾的字符串word1&#xff0c;和以j-1位结尾的字符串word2&#xff0c;想要达到相等&#xff0c;所需要删除元素的最少次数。 确定递推公式 当…

第 4 章 ECMASript 8 新特性

4.1 async 和 await async 和 await 两种语法结合可以让异步代码像同步代码一样 4.1.1 async 函数 async 函数的返回值为 promise 对象&#xff0c;promise 对象的结果由 async 函数执行的返回值决定 如果返回的是一个成功的Promise&#xff0c;result的结果就是一个成功的…

PD取电快充协议方案

PD快充协议是通过调整电压和电流来提供不同的充电功率。它采用了一种基于USB-C端口的通信协议&#xff0c;实现了充电器于设备之间的信息交换。在充电过程中设备会向充电器发出请求&#xff0c;要求提供不同的电压和电流&#xff0c;充电器接收到请求后&#xff0c;会根据设备的…

算法训练营|图论第一天 98. 所有可达路径

题目&#xff1a;所有可到达路径 题目链接&#xff1a; 98. 所有可达路径 (kamacoder.com) 解题思路&#xff1a; 邻接矩阵&#xff0c;注意没有result -1时候特判 #include<bits/stdc.h> using namespace std; vector<vector<int>>result; vector<…

cordova手动更新

1&#xff1a;依赖 cordova-plugin-file cordova-plugin-file-transfer cordova-plugin-file-opener2 第二个参数&#xff1a;application/vnd.android.package-archive来源 cordova plugin add cordova-plugin-app-version//获取cordova版本号 cordova plugin add cordova-p…

Python | Leetcode Python题解之第375题猜数字大小II

题目&#xff1a; 题解&#xff1a; class Solution:def getMoneyAmount(self, n: int) -> int:f [[0] * (n 1) for _ in range(n 1)]for i in range(n - 1, 0, -1):for j in range(i 1, n 1):f[i][j] j f[i][j - 1]for k in range (i, j):f[i][j] min(f[i][j], k …

视频中间件:大华视频设备接入管理应用

前言 上篇博文介绍了视频中间件&#xff1a;海康视频设备的接入管理&#xff1f;&#xff0c;今天给大家带来大华视频设备的接入管理&#xff0c;视频中间件平台支持大华Sdk、大华主动注册、Onvif、Rtsp、Gb28181等方式对大华视频设备的接入管理。同时视频中间件可支持协议互转…

Quarkus 后端开发记录

最近业余在开发一款智能助理产品&#xff0c;记录开发过程中的一些问题以备忘&#xff0c;也是帮其他人防坑。 主要技术栈 Quarkus: the Supersonic Subatomic Java Framework.RESTEasy Reactive: 实现 RESTful 接口 (JAX-RS)Hibernate Reactive: 是 Hibernate ORM 的响应式 …

虚幻引擎(Unreal Engine)技术使得《黑神话悟空传》大火,现在重视C++的开始吃香了,JAVA,Go,Unity都不能和C++相媲美!

虚幻引擎&#xff08;Unreal Engine&#xff09;火了黑神话游戏。 往后&#xff0c;会有大批量的公司开始模仿这个赛道&#xff01; C 的虚拟引擎技术通常指的是使用 C 语言开发的游戏引擎&#xff0c;如虚幻引擎&#xff08;Unreal Engine&#xff09;等。以下是对 C 虚拟引…

【HarmonyOS 4.0】全局UI方法

1. 弹窗 1.1 Toast - 消息提示 常用于显示一些简短的消息或提示&#xff0c;一般会在短暂停留后自动消失。 import promptAction from ohos.promptActionpromptAction.showToast(options: {message: string | Resource, duration: number, bottom: string | number}): void1.2…