Spring框架入门详解

article/2025/9/15 13:22:56

Spring

为什么引入Spring框架

为了提高开发效率和实现模块之间的高聚合低耦合,所以引入了Spring框架

高聚合低耦合

高内聚

内聚是指模块内的联系,各个元素之间紧密联系共同完成任务,模块内的联系越紧密越好,这样可以提高他们之间配合的工作效率 ——(模块之内各个元素男女搭配干活不累)

低耦合

耦合是指各个模块之间的联系,或者是说依赖关系,我们期望的效果应该是他们之间的依赖关系越弱越好,这样不会因为个别模块的失常导致全盘皆输——(各个模块能够独立,离开其他模块也能发光)

Spring的核心IOC和AOP

IOC(反转控制或控制反转)

IOC是什么

对于模块之间的联系/依赖,我们想要实现降低他们之间的联系/依赖,这个实现的行为就称为解耦,解耦即降低耦合度

IOC就做了各个模块之间解耦的操作,通过spring

IOC做了什么

工厂模式

在实际开发中我们可以把工厂模式中三层互相依赖的对象都使用配置文件配置起来,当启动服务器应用加载的时候,让一个类中的方法通过读取配置文件,把这些对象创建出来并存起来,在接下来的使用的时候,直接拿过来用就好了

工厂就是读取配置文件,创建对象然后把对象存到一个spring容器内,然后提供获取对象功能的类——是一个类

AOP(面向切面编程)

使用Spring

在pom.xml中添加依赖

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

我们需要的实际是

在这里插入图片描述

Spring的四个依赖,但是只需要导入spring-context就可以在扩展出来的引用依赖中,互相引用

在resourses下创建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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

这个配置文件用来管理配置的类

在测试方法内创建对象

//获取到spring容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");//读取xml配置文件,创建对象User userimpl = applicationContext.getBean("userimpl", User.class);//对象调用其方法 userimpl.count();

读取xml文件创建对象的getBean参数

//获取到spring容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");User userimpl = applicationContext.getBean("userimpl"); //传入bean ID 获取User userimpl = applicationContext.getBean( User.class);//传入User类型 获取User userimpl = applicationContext.getBean("userimpl", User.class);//都传

Bean标签的使用

Bean标签的属性

属性名
id自定义命名管理类的唯一标识,用来创建对象时引用
class管理类的全限定类名
scope管理类对象的作用范围,默认singleton(单例),prototype(多实例),
init-method初始化对象的名称
destory-method销毁对象的方法名称

Bean标签属性的补充

init-method

默认创建对象时调用无参构造,如果类中没有无参构造直接通过spring读取xml配置文件创建对象会报错,在xml文件中在类对应的bean标签内提供

<constructor-arg>标签,对有参构造做一定的描述,然后spring读取xml配置文件创建对象时就会自动调用配置好的有参构造

<bean id="userimpl" class="com.kaifamiao.dao.impl.Userimpl><constructor-arg name="a" value="12345"/>
</bean>

scope

默认为singleton(单例),此时创建的对象为唯一的,全局只有这个对象的一个实例,spring容器启动时被创建,容器销毁对象即回收

prototype(多实例),创建的对象是不同的对象,访问对象时才会创建

就导致

singleton修饰的类,在创建spring容器时就调用无参构造或者有参构造并创建对象

prototype修饰的类,在工厂创建实例的时候才会调用无参构造或者有参构造并创建对象

实例化Bean的三种方式

1.使用构造函数(默认为无参构造)

使用无参构造

<bean id="userimpl" class="com.kaifamiao.dao.impl.Userimpl" scope="prototype"></bean>

使用有参构造

<bean id="userimpl" class="com.kaifamiao.dao.impl.Userimpl><constructor-arg name="a" value="12345"/> //对有参构造方法做了描述
</bean>

<constructor-arg>属性的值

找有参构造的参数传参
name 参数名 (int abc) name = abcvalue 参数值(基本数据类型和字符串)
type 参数类型 (int abc) type = intref 参数值(引用数据类型)
index 参数下标 (int a ,string b) 传入string的index = 1

2.使用静态工厂(static)

使用静态/动态工厂首先需要创建工厂类

工厂类内提供创建对象的方法,方法内部可以添加想要实现的功能

在这里插入图片描述

创建好之后在xml配置文件中添加管理

<bean id="userimpl" class="com.kaifamiao.factory.StaticFactory" factory-method="getUser">
</bean>

class全限定类名更改为静态工厂的类名,并且添加factory-method属性,值为工厂内方法名

3.使用动态工厂

同静态工厂创建工厂类并提供创建对象的方法,只不过动态工厂需要提供非静态的方法

在这里插入图片描述

创建好之后在xml配置文件中添加管理

动态工厂创建对象需要先创建动态工厂类的bean对象,再通过bean对象进行对象的创建

<bean id="InstanceFactory" class="com.kaifamiao.factory.InstanceFactory"/>
<bean id="userimpl" factory-bean="InstanceFactory" factory-method="getUserBy">
</bean>

注入依赖

什么是注入依赖

在程序编写时,模块之间的依赖要尽可能的小,我们想要的是低耦合,而IOC做的解耦操作就降低了模块之间的耦合度,但是这个依赖关系并没有完全消失,而是把这种依赖关系交给spring容器来操控,由spring把对象传入所需模块的这个操作,就是注入依赖

注入依赖的三种方式

首先在所要注入依赖的类中添加成员变量定义,以便下边引用

在这里插入图片描述

1.构造函数注入

在所要注入依赖的类中提供有参构造,把传入参数值赋值给成员变量,实际做了和setter一样的赋值功能

在这里插入图片描述

通过bean标签先创建类对象,然后在bean标签下的<constructor-arg>标签为类提供的有参构造赋值

找有参构造的参数传参
name 参数名 (int abc) name = abcvalue 参数值(基本数据类型和字符串)
type 参数类型 (int abc) type = intref 参数值(引用数据类型)
index 参数下标 (int a ,string b) 传入string的index = 1

如果参数为引用类型,传参时候用ref传入参数,这个参数为所传入引用类型的bean对象id名

//创建userimpl类的bean对象,供service类传入参数使用
<bean id="userimpl" class="com.kaifamiao.dao.impl.Userimpl"> 
</bean>
<bean id="serviceimpl" class="com.kaifamiao.service.impl.ServiceImpl"><constructor-arg name="a" value="12345"/><constructor-arg name="b" value="张曼玉"/><constructor-arg name="user" ref="userimpl"/> //这里就用到了上面创建的userimpl的bean对象
</bean>

2.setter方法注入

setter方法注入依赖首先要在类中提供setter方法,用于赋值

在这里插入图片描述

然后通过bean标签先创建类对象,然后在bean标签下的<property>标签为类提供的有参构造赋值

<bean id="userimpl" class="com.kaifamiao.dao.impl.Userimpl">
</bean>
<bean id="serviceimpl" class="com.kaifamiao.service.impl.ServiceImpl"><property name="a" value="12345"/><property name="b" value="张曼玉"/><property name="user" ref="userimpl"/>
</bean>

这里发现setter方法注入和构造方法注入的xml配置文件写法大致相同,不同的是传入参数用的标签是<property>标签,并且该标签传入参数只有name一个值

3.p名称空间注入(本质上是setter方法注入)

先在类中提供setter方法

在xml配置文件的头导入p名称命名空间

然后在类的bean标签内部添加赋值语句

<?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:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="userimpl" class="com.kaifamiao.dao.impl.Userimpl"></bean><bean id="serviceimpl" class="com.kaifamiao.service.impl.ServiceImpl"//注意p命名空间注入传入参数是在bean内部 基本数据类型和字符串直接用name赋值,引用数据类型用name-ref来赋值p:a="1233456" p:b="武汉" p:user-ref="userimpl"></bean></beans>

补充,注入数组集合元素的方式(本质上是setter方法注入)

首先在类中提供成员

在这里插入图片描述

然后在xml配置文件下对该类的bean对象做描述

针对不同的数据类型使用不同的标签进行赋值

以service类中的成员顺序赋值方式为下

<bean id="service" class="com.kaifamiao.service.impl.ServiceImpl">
<!--        <property name="str" value="张三,李四,王五" />-->//对于数组,可以直接拿value传参,也可以像list集合一样传参<property name="str"><list><value>张曼玉</value><value>林青霞</value><value>郭德纲</value><value>周杰伦</value></list></property>//list集合用list标签<property name="list"><list><value>加菲猫</value><value>灰太狼</value><value>美羊羊</value><value>皮卡丘</value></list></property>//set集合用set标签<property name="set"><set><value>阿凡达</value><value>迪士尼</value><value>漫威</value></set></property>//map集合用map标签和entry标签 entry指键值对<property name="map"><map><entry key="喜羊羊" value="123"></entry><entry key="兔八哥" value="456"></entry></map></property>//properties配置用props和prop标签,value写在外边<property name="properties"><props><prop key="name">com.kaifamiao.name</prop><prop key="pace">com.kaifamiao.pace</prop></props></property></bean>
</beans>

http://chatgpt.dhexx.cn/article/78oitK44.shtml

相关文章

Spring详解(小白教程,大佬勿入,勿喷。)

1.Spring概述 Spring是什么&#xff1f; 在resource目录下创建子包需要用/ 如&#xff1a;com/baidu/userMapper.xml Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架&#xff0c; 以 IoC&#xff08;Inverse Of Control&#xff1a;反转控制&#xff09;和 AOP&…

spring aop详解

1.前言 spring aop是一个面向切面的编程&#xff0c;在自己第一遍学习的时候&#xff0c;感觉aop没有什么作用&#xff0c;但是真实接触下来&#xff0c;感觉spring aop还是很有用途的&#xff0c;感觉自己之前的想法太年轻了。 2.概念 Spring 提供了两种AOP 的实现&#xf…

详解Spring

Spring SSH框架中Struts2:是基于Web层&#xff0c;Hibernate&#xff1a;是基于持久化的&#xff0c;Spring:业务层&#xff0c;管理bean&#xff0c;它是一个容器&#xff0c;List,map&#xff0c; Set这里的内容&#xff0c;是适合已经学过了Spring的人供复习参考的..... Spr…

Spring详解简介

1、Spring的简介 Spring的英文翻译为春天&#xff0c;可以说是给Java程序员带来了春天&#xff0c;因为它极大的简化了开发。我得出一个公式&#xff1a;Spring 春天 Java程序员的春天 简化开发。最后的简化开发正是Spring框架带来的最大好处。 Spring是一个开放源代码的设计…

spring 详细讲解

有人说&#xff0c;“Java程序员都是Spring程序员”&#xff0c;老三不太赞成这个观点&#xff0c;但是这也可以看出Spring在Java世界里举足轻重的作用。 基础 1.Spring是什么&#xff1f;特性&#xff1f;有哪些模块&#xff1f; Spring Logo 一句话概括&#xff1a;Spring…

JAVA框架Spring 全面详解(学习总结)

Spring 1.Spring 全面详解 1.1简介 ◆ Spring&#xff1a;春天 给软件行业带来了春天 ◆ 2002&#xff0c;首次推出了Spring框架的雏形&#xff1a;interface21框架 ◆ Spring框架即是以interface21框架为基础经过重新设计&#xff0c;并不断丰富其内涵&#xff0c;于2004…

Spring的事务详解

事务简介 事务在逻辑上是一组操作&#xff0c;要么执行&#xff0c;要不都不执行。主要是针对数据库而言的&#xff0c;比如说 MySQL。 为了保证事务是正确可靠的&#xff0c;在数据库进行写入或者更新操作时&#xff0c;就必须得表现出 ACID 的 4 个重要特性&#xff1a; 原…

java系列之Spring详解

一、Spring简介 1.1 简介 关于spring的简介&#xff0c;可以查看百度百科&#xff0c;下面内容部分来自百度百科 Spring框架是针对软件开发过程中的复杂性而创建的。其使用javaBean来完成以前只可能由EJB完成的事情。 2002年&#xff0c;Rod Jahnson首次推出了Spring框架雏形…

Spring全面详解

—————版本Spring5.x————— ——编译器IntelliJ IDEA 2020.2.3 —— <-- 该文章有点老旧&#xff0c;停止了更新&#xff0c;请查看Spring5最新文章&#xff0c;目前已经书写完成 --> Spring5全面详解 它会持续更新&#xff0c;你所看到的不是最终版本。 如…

Spring-全面详解(学习总结)

Spring 1.简介 1.1.简介 简介 Spring : 春天 —>给软件行业带来了春天 2002年&#xff0c;Rod Jahnson首次推出了Spring框架雏形interface21框架。 2004年3月24日&#xff0c;Spring框架以interface21框架为基础&#xff0c;经过重新设计&#xff0c;发布了1.0正式版。 …

spring超全面详解

spring概述 Spring 是于2003年兴起的一款轻量级的,非侵入式的IOC和AOP的一站式的java开发框架 为简化企业级应用开发而生. 1.轻量级: 就是指spring核心功能的jar包不大 2.非侵入式: 我们的业务代码不需要继承或实现spring中任何的类或接口 3.IOC: 控制反转 就是把创建…

Spring全面详解(学习总结)

Spring FrameWork一、 前言二、IOC(控制反转)2.1 对于IOC的理解2.2如何使用IOC2.3配置文件的解读2.4IOC容器创建bean的两种方式2.5从IOC容器中取bean2.6bean的属性如果包含特殊字符 三、DI(依赖注入)四、Spring中的bean五、Spring中的继承六、Spring的依赖七、Spring读取外部资…

查看Linux的用户权限(转载)

&#xff08;转&#xff09;Linux查看用户及其权限管理 查看用户 请打开终端&#xff0c;输入命令&#xff1a; $ who am i或者 $ who mom likes输出的第一列表示打开当前伪终端的用户的用户名&#xff08;要查看当前登录用户的用户名&#xff0c;去掉空格直接使用 whoami …

linux查看登录用户

1&#xff0c;w w,显示目前登入系统的用户信息 -f  开启或关闭显示用户从何处登入系统。 -h  不显示各栏位的标题信息列。 -l  使用详细格式列表&#xff0c;此为预设值。 -s  使用简洁格式列表&#xff0c;不显示用户登入时间&#xff0c;终端机阶段作业和程序所耗费…

Linux下查看当前用户和所属用户组方法总结

1、查看当前用户 &#xff08;1&#xff09;whoami &#xff08;2&#xff09;id -un &#xff08;3&#xff09;who -H &#xff08;4&#xff09;who&#xff08;查看当前登陆的所有用户&#xff0c;和who -H功能差不多&#xff09; 2、查看当前用户所属的组 &#xff08…

linux如何查看所有的用户和组信息?

首先打开终端&#xff08;这里是Ubuntu系统&#xff09;&#xff0c;其他的打开命令界面即可 然后输入命令行cat /etc/passwd&#xff0c;直接按下回车键即可 然后这里就会显示很多的信息&#xff0c;所有的用户都在这里面了 然后就是查看所有的组&#xff0c;同样的方法…

linux 查看用户信息

目录 /etc/passwd id命令 whois命令 whoami命令 who命令 w命令 finger命令 vlock命令 /etc/passwd 有的用户信息在根目录 /etc/passwd 文件内&#xff0c;而passwd的所有权限是root用户及root组用户&#xff0c;所有想要查看所有用户&#xff0c;需要root用户登录系统…

linux查看所有用户命令

1、Linux里查看所有用户 (1)在终端里.其实只需要查看 /etc/passwd文件就行了. (2)看第三个参数:500以上的,就是后面建的用户了.其它则为系统的用户. 或者用cat /etc/passwd |cut -f 1 -d : 2、用户管理相关命令 useradd命令 useradd 选项 用户名 -d 目录,指定用户主目录,如…

Linux命令之查看登录用户列表users

概述 users 命令 用于显示当前登录系统的所有用户的用户列表。每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话&#xff0c;那他的用户名将显示相同的次数。 注&#xff1a;该命令与 who、w 类似。不过该命令只会显示登录用户名&#xff0c;信息简略。 语法…

Linux 系统中如何查看当前所有登录的用户

导读今天我们简单介绍下在 Linux 系统中列出登录用户的几种方法。 在多用户的 Linux 系统中&#xff0c;有时候会有查询当前已登录到系统中用户的需求。比如因某种原因要​​注销某个用户​​​。 今天我们简单介绍下在 Linux 系统中列出登录用户的几种方法。 我们所介绍的这…