Spring-01

news2024/11/26 12:19:00

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

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

5.4.1通过set方法注入

service层中UserServiceImpl类中的代码

public class UserServiceImpl implements IUserService {

    @Setter
    private IUserMapper userMapper;

    @Override
    public 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 {
    @Test
    public void getUserById() {
        int id = 1001;

        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        // userService是bean的id或name
        UserServiceImpl 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;
    }

    @Override
    public 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改为小写 找的是userMapper
    public void setUserMapper(IUserMapper userMapper) {
        this.userMapper = userMapper;
    }
    
    public UserServiceImpl() {
    }

    public UserServiceImpl(IUserMapper userMapper) {
        this.userMapper = userMapper;
    }

    @Override
    public 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;
    }

    @Override
    public 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.coloradmin.cn/o/1554298.html

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

相关文章

智慧旅游中数据可视化的革新作用

在数字化浪潮席卷全球的今天&#xff0c;数据可视化技术已成为链接信息与用户的重要桥梁&#xff0c;尤其在智慧旅游领域&#xff0c;它的作用更是日益凸显。随着智慧旅游的概念越来越被重视&#xff0c;数据可视化成为其提供高效、直观服务的关键手段之一。本文将探讨数据可视…

K8S安装和部署(kubeadmin安装1主2从)

这里用kubeadmin方式进行安装部署 1. 准备三台服务器 服务器地址 节点名称 192.168.190.200 master 主 192.168.190.201 node1 从 192.168.190.202 node2 从 2. 主机初始化&#xff08;所有主机&#xff09; 2.1根据规划设置主机名 #切换到192.168.190.200 hostnamectl…

每天五分钟卷积神经网络:如何基于滑动窗口技术完成目标的检测?

汽车检测算法 现在我们想要构建一个汽车检测算法,我们希望输入到算法中一张图片,算法就可以帮助我们检测出这张图片中是否有汽车。 数据集 首先创建一个标签训练集,x是样本,y是标签。我们的训练集最好是被剪切过的图片,剪掉汽车以外的部分,使汽车居于中间位置,就是整张…

深入解析Java继承机制:面向对象编程的核心探究【Java面试题】

作为一名对技术充满热情的学习者&#xff0c;我一直以来都深刻地体会到知识的广度和深度。在这个不断演变的数字时代&#xff0c;我远非专家&#xff0c;而是一位不断追求进步的旅行者。通过这篇博客&#xff0c;我想分享我在某个领域的学习经验&#xff0c;与大家共同探讨、共…

如何看待各省纷纷成立数据管理局?

截至2024年1月&#xff0c;我国今年已有11个省市级数据局揭牌成立&#xff0c;包括江苏省数据局、四川省数据局、内蒙古自治区政务服务与数据管理局、上海市数据局、云南省数据局、青海省数据局、河北省数据和政务服务局、湖南省数据局、广东省政务服务和数据管理局、天津市数据…

PCI总线管脚定义(引脚定义)

文章目录 1&#xff1a; 参考资料的链接2: 图片说明3&#xff1a;PCI文字说明每日好图 1&#xff1a; 参考资料的链接 PCI bus pinout PCI三种标准引脚信号定义 PCI bus pinout 2: 图片说明 A面和B面正反 PCI Universal Card 32/64 bit ----------------------------------…

docker 的mysql容器中没有mysqlbinlog

docker 的mysql容器中没有mysqlbinlog bug信息原因&#xff1a;阉割版mysql容器&#xff0c;构建者没有把mysqlbinlog当成必需工具&#xff0c;去掉了解决方法&#xff1a;验证成功删除无用的文件5.7开启binlog&#xff0c;&#xff08;8 的默认开启了&#xff09;5.7版本的mys…

【论文阅读】ELA: Efficient Local Attention for Deep Convolutional Neural Networks

&#xff08;ELA&#xff09;Efficient Local Attention for Deep Convolutional Neural Networks 论文链接&#xff1a;ELA: Efficient Local Attention for Deep Convolutional Neural Networks (arxiv.org) 作者&#xff1a;Wei Xu, Yi Wan 单位&#xff1a;兰州大学信息…

高效测量“芯”搭档 | ACM32激光测距仪应用方案

激光测距仪概述 激光测距仪是利用激光对目标的距离进行准确测定的仪器。激光测距仪在工作时向目标射出一束很细的激光&#xff0c;由光电元件接收目标反射的激光束&#xff0c;计时器测定激光束从发射到接收的时间&#xff0c;计算出从观测者到目标的距离。激光测距仪分为手持激…

4核8G服务器租用优惠价格418元一年,可买3年

京东云4C8G云服务器优惠价格418元1年、1899元三年&#xff0c;配置为&#xff1a;轻量云主机4C8G-180G SSD系统盘-5M带宽-500G月流量&#xff0c;京东云主机优惠活动 atengyun.com/go/jd 可以查看京东云服务器详细配置和精准报价单&#xff0c;活动打开如下图&#xff1a; 京东…

【MySQL探索之旅】MySQL数据表的增删查改——约束

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更…

魔众众包系统——革命性的在线任务接单平台

魔众众包系统&#xff0c;一个革命性的在线任务接单平台&#xff0c;最新版本为v1.9.0&#xff0c;发布日期为2024年3月10日。这个平台不仅提供了一个高效的任务分配和管理环境&#xff0c;还通过其先进的技术架构&#xff0c;确保了系统的稳定性和可靠性。无论是对于企业还是个…

金蝶云星空和旺店通·旗舰奇门接口打通对接实战

金蝶云星空和旺店通旗舰奇门接口打通对接实战 对接源平台:金蝶云星空 金蝶K/3Cloud&#xff08;金蝶云星空&#xff09;是移动互联网时代的新型ERP&#xff0c;是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态、人人、体验”&#xff0c;旨在帮助企业…

『大模型笔记』提示工程、微调和RAG之间对比

提示工程、微调和RAG之间对比 文章目录 一. 提示工程、微调和RAG之间对比二. 参考文章文章:Prompt Engineering vs Finetuning vs RAG一. 提示工程、微调和RAG之间对比 Prompt EngineeringFinetuning

2024年MathorCup数学建模思路B题思路分享

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

综合实验1

一、配置IP地址 [AR1]int g0/0/0 [AR1-GigabitEthernet0/0/0]ip add 192.168.1.254 24 [AR1-GigabitEthernet0/0/0]int se4/0/0 [AR1-Serial4/0/0]ip add 15.1.1.1 24 [AR1-Serial4/0/0] [AR2]int g0/0/0 [AR2-GigabitEthernet0/0/0]ip add 192.168.2.254 24 [AR2-Giga…

阿里云2核4G云服务器165元一年,ECS u1优惠价格199元一年

阿里云2核4G服务器租用优惠价格&#xff0c;轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图&#xff1a; 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…

【python】深入探讨flask是如何预防CSRF攻击的

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

【八大排序】一篇文章搞定所有排序

文章目录 1.排序的概念2.常见排序算法的实现2.1 插入排序2.1.1直接插入排序2.1.2希尔排序 2.2选择排序2.2.1直接选择排序:2.2.2堆排序 2.3交换排序2.3.1冒泡排序2.3.2快速排序Hoare法前后指针法挖坑法非递归版本 2.4归并排序递归版本非递归版本 2.5计数排序3.排序的比较 1.排序…

这款3D的小米su7的网页体验,你一定要进来看看

这款3D的小米su7的网页体验&#xff0c;你一定要进来看看 一、背景介绍二、技术介绍三、网站演示四、总结 大家好&#xff0c;这里是程序猿代码之路。今天主要给大家介绍一款3D的小米su7的网页体验背后的技术。随着互联网技术的不断进步&#xff0c;3D可视化已经成为在线展示和…