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 …

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;缓存雪崩&#…

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

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

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文件…

【2024系统架构设计】案例分析- 4 嵌入式

目录 一 基础知识 二 真题 一 基础知识 1 基本概念 ◆系统可靠性是系统在规定的时间内及规定的环境条件下,完成规定功能的能力,也就是系统无故障运行的概率。或者,可靠性是软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统的功能特性的基本能力。

基于springboot+vue+Mysql的家政服务管理平台

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

基于STC12C5A60S2系列1T 8051单片机通过单个按键单击次数实现开关机应用

基于STC12C5A60S2系列1T 8051单片机通过单个按键单击次数实现开关机应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍基于STC12C5A60S2系列1T 8051单片机通过单个按…

软件工程学习笔记14——案例解析篇

一、大型开源项目对软件工程的应用 以VS Code为例&#xff0c;看大型开源项目是如何应用软件工程的。 软件工程的核心&#xff0c;就是围绕软件项目开发&#xff0c;对开发过程的组织&#xff0c;对方法的运用&#xff0c;对工具的使用。 所以当我们去观察一个软件项目&#…

Linux(CentOS7.5) 安装部署 Python3.6(超详细!包含 Yum 源配置!)

文章目录 1.配置 Yum 源2.下载 Python3 包3. 解压4.安装依赖环境5.安装出错场景 6.创建软链接7.配置 Python3 的环境变量8.验证补充&#xff1a;安装 openssl-devel补充&#xff1a;pip3 源配置 1.配置 Yum 源 # 注意&#xff01;&#xff01;&#xff01;请先切换到 root 账号…

FPGA Artix7 Bootloader App Python升级

文章目录 软硬环境复现官方 srec_spi_bootloader例子简介Vivado硬件部分存储划分Vitis 嵌入式 BootVitis 嵌入式 Appelf转换srec合并boot和app得到mcs文件下载测试过程分析 基础知识BIT MCS HEX BINBit SwappingSREC 文件格式Vivado约束 串口Boot地址划分链接脚本修改Github Li…

五、基于KubeAdm搭建多节点K8S集群

如需查阅上一步骤,请点击下面链接:四、戴尔R630本地服务器Linux Centos7.9系统安装docker-ce-20.10.10-3.el7版本-CSDN博客文章浏览阅读727次,点赞12次,收藏13次。1、准备工作3、Linux Centos7.9系统的iDRAC远程管理、网络设置、SecureCRT远程登录终端、企业级静态ip地址配…

HarmonyOS实战开发-使用Flex容器组件,实现弹性布局效果。

介绍 本篇Codelab是基于Flex容器组件&#xff0c;实现弹性布局效果。弹性布局的特点是页面元素的宽度按照屏幕分辨率进行适配调整&#xff0c;但整体布局不变。 相关概念 Flex组件&#xff1a;以弹性方式布局子组件的容器组件。Search组件&#xff1a;搜索框组件&#xff0c;…