Spring-01

Spring

1.Spring是什么?

spring是一个开源的Java应用框架,它提供了一套全面的基础设施支持

2.Spring框架的主要特点

1)依赖注入(Dependency Injection,DI)

2)面向切面编程(AOP)

3)事务管理

4)Web支持

5)数据访问

6)测试支持

7)扩展性

3.为什么使用Spring?

1)方便解耦,简化开发

2)Spring就是一个大工厂,可以将所有对象创建和依赖关系维护的工作交给Spring来完成

3)Spring提供面向切面编程,可以方便地实现对程序进行权限拦截、运行监控等功能

4)声明式事务的支持只需要通过配置就可以完成对事务的管理

5)方便集成各种优秀的框架

6)降低JavaEE中API的使用难度

4.Spring的IOC

IOC是控制反转,即获取依赖对象的过程被反转了。

控制反转之后,获取依赖对象的过程由自身管理变成了由IOC容器自动注入。

简单来讲,控制反转之后,获取依赖对象的过程从原来的自己new一个对象变成了从IOC容器中拿出来直接用即可。

5.Spring的环境搭建

5.1创建项目

5.2引入核心依赖

首先,在最外层的pom.xml文件中引入Spring的核心基础依赖

<!--Spring核心基础依赖-->
<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>${spring.version}</version>
</dependency>
<!--日志相关-->
<dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version>
</dependency>
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version>
</dependency>
<!--测试相关-->
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope>
</dependency>

然后,在properties标签下引入spring的版本

<spring.version>4.2.5.RELEASE</spring.version>

还需要设置打包方式,其中pom为不参与打包,jar为打为jar包,war为打为war包

<packaging>pom</packaging>

5.3添加配置文件

在每个子模块下的resources文件夹下创建一个applicationContext.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"></beans>

5.4将bean的实例化工作交给Spring来完成

5.4.1通过set方法注入

service层中UserServiceImpl类中的代码

public class UserServiceImpl implements IUserService {@Setterprivate IUserMapper userMapper;@Overridepublic User getUserById(int id) {User userById = userMapper.getUserById(id);return userById;}
}

在IOC容器中进行设置

<bean name="userMapper" class="com.tledu.lsz.mapper.UserMapperImpl"/>
<!--name为属性名字   /   ref为引用的bean的名字-->
<bean name="userService" class="com.tledu.lsz.service.UserServiceImpl"><property name="userMapper" ref="userMapper"/>
</bean>

测试

public class UserTest {@Testpublic void getUserById() {int id = 1001;ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");// userService是bean的id或nameUserServiceImpl userService = (UserServiceImpl) applicationContext.getBean("userServiceImpl");User userById = userService.getUserById(id);System.out.println(userById);}
}
5.4.2通过构造方法注入

service层中UserServiceImpl类中的代码

public class UserServiceImpl implements IUserService {private IUserMapper userMapper;public UserServiceImpl() {}public UserServiceImpl(IUserMapper userMapper) {this.userMapper = userMapper;}@Overridepublic User getUserById(int id) {User userById = userMapper.getUserById(id);return userById;}
}

在IOC容器中进行设置

<bean name="userMapper" class="com.tledu.lsz.mapper.UserMapperImpl"/>
<!--name 属性名字   /   ref 引用的bean的名字-->
<bean name="userService" class="com.tledu.lsz.service.UserServiceImpl"><constructor-arg ref="userMapper"/>
</bean>

6.scope

6.1singleton

如果scope取值为singleton,表明容器中创建时只存在一个实例,也就是单例模式

如果不进行设置scope,默认就是singleton

6.2prototype

每次获取都创建一个新的对象,并且这个对象的生命周期不归Spring管理

7.自动装配(自动注入)

通过Autowire,有两种取值:①byName ②byType

7.1byName

byName是通过set方法的名字进行匹配的,如果找不到,就是不赋值

例如setUserMapper方法,通过byName,就会找到userMapper,如果bean的name或id也为userMapper,就可以找到(区分大小写)

<bean name="userMapper" class="com.tledu.lsz.mapper.UserMapperImpl"/>
<!--name 属性名字   /   ref 引用的bean的名字-->
<bean name="userService" class="com.tledu.lsz.service.UserServiceImpl" autowire="byName">
</bean>
public class UserServiceImpl implements IUserService {private IUserMapper userMapper;//set方法  找的时候 把set去掉 U改为小写 找的是userMapperpublic void setUserMapper(IUserMapper userMapper) {this.userMapper = userMapper;}public UserServiceImpl() {}public UserServiceImpl(IUserMapper userMapper) {this.userMapper = userMapper;}@Overridepublic User getUserById(int id) {User userById = userMapper.getUserById(id);return userById;}
}

7.2byType

byType是通过set方法的参数列表中的数据类型进行匹配的,如果beans.xml中出现了多个相同类型的对象,就会报错

如setUserMapper(IUserMapper userMapper)方法,通过byType,就会找到IusMapper,如果是接口,就去找对应的实现类

<bean name="userMapper" class="com.tledu.lsz.mapper.UserMapperImpl"/>
<!--name 属性名字   /   ref 引用的bean的名字-->
<bean name="userService" class="com.tledu.lsz.service.UserServiceImpl" autowire="byType">
</bean>
public class UserServiceImpl implements IUserService {private IUserMapper userMapper;public void setUserMapper(IUserMapper userMapper) {this.userMapper = userMapper;}public UserServiceImpl() {}public UserServiceImpl(IUserMapper userMapper) {this.userMapper = userMapper;}@Overridepublic User getUserById(int id) {User userById = userMapper.getUserById(id);return userById;}
}

8.生命周期

在bean标签中设置属性init-method=“方法名”,在初始化时会执行该方法

在bean标签中设置属性destroy-method=“方法名”,在销毁时会执行该方法

9.迟加载

在bean标签中设置属性lazy-init=“true"或"false”

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

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

相关文章

如何使用剪映专业版剪辑视频

1.操作界面功能介绍 2.时间线的使用 拖动前端后端缩减时长&#xff0c;有多个素材可以拖动调节前后顺序拼接。 分割视频 删除

C语言最大公约数(辗转相除法)

输入两个整数&#xff0c;求他们的最大公约数&#xff1a; 如果我们不用辗转相除法的话&#xff0c;两个整数的最大公约数&#xff0c;我们就可以定义一个整数为两个整数中最小的那个数&#xff0c;然后两个整数一起除我们新定义的整数&#xff0c;如果都除尽了&#xff0c;这…

淘宝商品采集API商品详情数据接口商品搜索列表API接口

淘宝商品采集API、商品详情数据接口以及商品搜索列表API接口是淘宝开放平台提供的一系列接口&#xff0c;旨在帮助开发者更高效地获取淘宝平台上的商品信息。以下是对这些接口的基本介绍和使用方法&#xff1a; 请求示例&#xff0c;API接口接入Anzexi58 一、淘宝商品采集API …

PageHelper的使用

PageHelper 文章目录 PageHelper引入依赖配置使用方法解读PageHelper.startPagePagePageInfo 引入依赖 <!-- spring-boot mybatis pagehelper --> <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-st…

Linux 环境安装 Elasticsearch 8.X

安装前说明 首先确定操作系统&#xff0c;在Linux发行版上执行uname -a查看具体系统。我是Ubuntu系统&#xff0c;可以用直接用apt-get安装&#xff0c;也可以下载tar.gz包手动安装。使用apt-get安装更方便快速&#xff0c;但不同的文件会被安装到不同的目录&#xff0c;不方便…

OSCP靶场--RubyDome

OSCP靶场–RubyDome 考点(CVE-2022-25765 suid ruby提权) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap -Pn -sC -sV 192.168.249.22 --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-29 00:28 EDT Nmap scan report for 192.168.249.22 Hos…

实时渲染是什么意思?实时渲染和离线渲染的区别

一、实时渲染是什么意思&#xff1f; 实时渲染是指在计算机程序运行时即时地生成图像和动画的过程&#xff0c;这种渲染技术通常用于网络游戏、虚拟现实和增强现实等需要实时交互的XR应用中。实时渲染需要在每秒内渲染数百万到数十亿个像素&#xff0c;以呈现出平滑的动画和交…

深入并广泛了解Redis常见的缓存使用问题

Redis 作为一门主流技术&#xff0c;缓存应用场景非常多&#xff0c;很多大中小厂的项目中都会使用redis作为缓存层使用。 但是Redis作为缓存&#xff0c;也会面临各种使用问题&#xff0c;比如数据一致性&#xff0c;缓存穿透&#xff0c;缓存击穿&#xff0c;缓存雪崩&#…

ASR6505是基于STM 8位MCU的无线通信芯片组

ASR6505是一种通用的LoRa无线通信芯片组&#xff0c;集成了LoRa无线电收发器、LoRa调制解调器和一个8位CISC MCU ASR6505是基于STM 8位MCU与SX1262 的SiP芯片&#xff0c;相对于32位MCU更具成本优势&#xff0c;8mm*8mm*0.9mm超小尺寸可以满足客户不同的产品规格&#xff0c;Q…

锁(Lock)

1.死锁 (1). 概念 : 不同的线程分别占据着对方的资源不放弃&#xff0c;都在等待对方放弃自己需要的资源&#xff0c;这样就形成了死锁. 一旦出现死锁&#xff0c;程序即不会给出异常&#xff0c;也不会给出提示信息&#xff0c;只是所有线程处于阻塞状态&#xff0c;无法进行.…

CentOS 7.9上安装Redis

在CentOS 7.9上安装Redis通常涉及以下步骤&#xff1a; 下载Redis源代码&#xff1a; 首先&#xff0c;你需要从Redis官网或者使用Git克隆获取Redis的源代码。由于Redis通常不需要特定的操作系统版本&#xff0c;你可以使用任何版本的CentOS来安装Redis。 通过Git克隆源代码&am…

39.基于SpringBoot + Vue实现的前后端分离-无人智慧超市管理系统(项目 + 论文PPT)

项目介绍 随着互联网时代的发展&#xff0c;传统的线下管理技术已无法高效、便捷的管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;国家在环境要求不断提高的前提下&#xff0c;无人智慧超市管理系统建设也逐渐进入了信…

2024蓝桥杯省赛保奖突击班-Day2-前缀和、差分、尺取_笔记_练习题解

3月25日-课堂笔记 前缀和预处理 O ( n ) \mathcal{O}(n) O(n) s[1] a[1]; for(int i 2; i < n; i)s[i] s[i - 1] a[i];利用前缀和查询区间和 O ( 1 ) O(1) O(1) long long calc(int l, int r) {return l 1 ? s[r] : s[r] - s[l - 1]; }差分序列的求法 c[1] a[…

电子元器件商城模式的安全与风险管理

电子元器件商城模式的安全与风险管理至关重要&#xff0c;特别是在当前数字化和网络化的环境下。以下是一些关键的安全考虑和风险管理策略&#xff1a; 数据安全与隐私保护&#xff1a; 保护客户的个人和交易数据是至关重要的。使用加密技术来保护数据传输和存储&#xff0c;确…

Qt Creator 与 VS 开发 Qt 项目的详细比较(详细版)

Qt Creator 与 VS 开发 Qt 项目的详细比较 简介 Qt 是一个功能强大、跨平台的应用程序框架&#xff0c;可用于开发各种类型的应用程序&#xff0c;包括桌面应用程序、移动应用程序和嵌入式应用程序。 Visual Studio 是 Microsoft 开发的集成开发环境 (IDE)&#xff0c;可用于…

Linux内网提权

一、SUID提权 前提条件&#xff1a; &#xff08;1&#xff09;SUID仅对二进制有效&#xff08;2&#xff09;执行者对于该程序需要有x的可执行权限&#xff08;3&#xff09;本权限仅在程序的执行过程中有效 1、设置SUID权限&#xff1a;&#xff08;root权限&#xff09; …

AI新工具 小模型也有大智慧Qwen1.5-MoE;大模型动态排行榜;马斯克更新Grok-1.5

✨ 1: Qwen1.5-MoE 阿里巴巴一款小型 MoE 模型&#xff0c;只有 27 亿个激活参数&#xff0c;但性能与最先进的 7B 模型&#xff08;如 Mistral 7B 和 Qwen1.5-7B&#xff09;相匹配。 Qwen1.5-MoE是一个使用混合专家模型&#xff08;Mixture-of-Experts&#xff0c;MoE&…

小型分布式文件存储系统GoFastDfs应用简介

前言 最近稍微留意了一下各个文件存储系统的协议&#xff0c;发现minio是LGPLV3, 而fastdfs 是GPL3,这些协议其实对于商业应用是一个大坑。故而寻找一些代替品。 go-fastdfs就是其中之一&#xff0c;官网在&#xff1a; go-fastdfs 具体应用 其实可以直接查看官网教程的。 下…

【学习】JMeter和Postman两种测试工具的主要区别有哪些

Postman和JMeter都是常用的API测试工具&#xff0c;但它们之间存在一些不同之处。以下是Postman和JMeter的主要区别&#xff1a; 语言支持 Postman是一个基于Chrome的应用程序&#xff0c;因此它使用JavaScript作为编程语言。这意味着你可以使用JavaScript来编写测试脚本和断…

element-ui升级到element-plus兼容性问题处理

1.报错&#xff1a;dropdown-item.mjs:42 Uncaught (in promise) TypeError: Cannot destructure property ‘onItemEnter’ of ‘(0 , vue__WEBPACK_IMPORTED_MODULE_0__.inject)(…)’ as it is undefined. 对应的源码位置如下&#xff0c;是elemen-plus中的dropdown-item文件…