Spring框架

article/2025/10/27 20:09:01

一,spring框架概述

1、spring框架是轻量级的开源JavaEE框架
2、spring可以解决企业应用开发的复杂性
3、spring有两个核心部分:IOC和AOP
IOC:控制反转,把创建对象过程交给Spring来进行管理
AOP:面向切面,不修改源代码进行功能增强
4,spring的特点
1,方便解耦,简化开发
2,AOP的编程支持
3,方便程序测试
4,方便与其他框架进行整合
5,方便进行事务的操作
6,降低API开发难度

1.1 简介

spring理念:使现有的技术更容易使用,本身是一个大杂烩,整合了现有的技术框架
spring是一个开源的免费的框架!(容器)
spring是一个轻量级,非入侵式的框架!
控制反转(IOC) ,面向切面编程的(AOP)
支持事务的处理,对框架整合的支持!
总结:Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架!
在这里插入图片描述
在这里插入图片描述
其中提到的springboot是一个快速开发的脚手架。
基于SpringBoot可以快速的开发单个微服务。
约定大于配置
SpringCloud
SpringCloud是基于SpringBoot实现的。
现在大多数公司都在使用SpringBoot进行快速的开发,学习SpringBoot 的前提,需要完全掌握Spring以及SpringMVC 起到承上启下的作用!

1.2,环境配置

版本问题
在这里插入图片描述
新建一个maven项目,不要勾选默认的模板
在这里插入图片描述
检查这两个配置文件,用自己的maven,不要用idea自带的。用自己配置的阿里云镜像,下载依赖比较快
在这里插入图片描述
然后把父工程的src目录给删除掉
在这里插入图片描述
2,用maven导入spring的依赖

网址:maven仓库导入spring依赖

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.15</version>
</dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.15</version>
</dependency>

二,IOC(依赖注入)

什么是IOC:
控制反转IOC,是一种设计思想,DI(依赖注入)是实现Ioc 的一种方法,个人认为所谓控制反转就是:获得依赖对象的方式反转了。采用xml方法配置bean的时候,Bean的定义信息是和实现分离的,而采用注解的方法可以把两者合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到零配置的目的。

=======================================

IOC的思想基于IOC容器完成, IOC容器底层就是对象工厂

spring提供了IOC容器实现的两种方式:(两个接口)

(1)BeanFactory:IOC容器基本实现,是spring内部的使用接口,不提供开发人员进行使用

加载配置文件时候不会创建对象,在获取对象(使用)才会去创建对象

(2)ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用

加载配置文件时候就会把在配置文件对象进行创建

=========================================

IOC底层原理:xml解析,工厂模式,反射

使用set注入之后,程序不在具有主动性,而是变成了被动的接受对象。

   //用户实际调用的是业务层,dao层不需要接触UserServiceImpl userService = new UserServiceImpl();((UserServiceImpl) userService).setUserDao(new UserDaoMysqlImpl());userService.getUser();

这种思想,从本质上解决了问题,我们程序员不用在去管理对象的创建了。系统的耦合行大大降低了,可以更加专注的在业务的实现上,这就是ioc的原型。

ssm有一个弊端

每一个层都要写一个配置文件,然后在整合到application.properties文件里,配置太多了,人称配置地狱,直到springboot的出现!!

三,IOC操作Bean管理

1,什么是bean管理

bean管理指的是两个操作

spring创建对象

spring注入属性

2、bean管理操作有两种方式

(1)基于xml配置文件的方式实现

(2) 基于注解的方式实现(推荐使用

配置User对象
<bean id="user" class="cn.skyang.USer"></bean>

(1) 在spring配置文件当中,使用bean标签,标签里面添加对应的属性,就可以实现对象创建

(2) 在bean标签有很多属性,介绍常用的属性

(3) id class:注意最好使用全类路径 创建对象的时候默认执行无参构造方法进行对象的创建

2.1、基于xml方式注入属性

(1)DI:依赖注入,就是注入属性的意思

使用set的方法注入或者使用有参构造的方法注入

3.1 注入属性 外部bean

在这里插入图片描述

3.1 注入属性 内部bean

级联赋值的概念:一个属性出现多个表中,修改一个表当中的该属性,为了保持数据同步该属性在另外的表中也会被修改

1、一对多的关系:部门和员工

一个部门有多个员工,一个员工属于一个部门

2、在实体类之间表示一对多关系,员工表示所属的部门,使用对象类型属性进行表示。
在这里插入图片描述

3.3 注入集合属性xml

IOC操作bean的管理(xml注入集合的属性)
1.、注入数据类型属性
2、注入List集合类型属性
3、注入Map集合类型的属性
在这里插入图片描述

FactoryBean
1、spring有两种类型的bean,一种是普通bean,另一种是工厂bean(FactoryBean)
2、普通bean:在配置文件当中定义bean的类型就是返回值类型
3、工厂bean:在配置文件当中bean的类型可以和返回值类型不一样。
步骤1:创建类:让这个类作为工厂bean,实现接口FactoryBean
步骤2:实现接口的方法,在实现方法中定义返回的bean类型
在这里插入图片描述

3.4 bean的作用域

在spring里边,设置创建bean的实例是单例还是多例?
默认是单例
在这里插入图片描述

3.5 bean的生命周期

从对象创建到对象销毁的过程

通过构造器创建bean实例(无参数构造)

为bean的属性设置值和对其他bean的引用(调用set方法)

调用bean的初始化的方法(需要进行配置初始化的方法)

bean可以使用了(对象获取到了)

当容器关闭的时候,调用bean的销毁的方法(需要配

3.6 Bean引入外部属性文件

1,直接配置数据库信息
2,配置德鲁伊连接池
3,引入外部属性文件配置数据库连接
小结:
在这里插入图片描述

四、 IOC Bean(基于注解的方式)

1,什么是注解

注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值…)

使用注解,注解作用在类上面,方法上面,属性上面,使用注解的目的,简化xml的配置

2,Spring针对Bean管理中创建对象提供注解

@Component

@Service

@Controller

@Repository

上面四个注解功能是一样的,都可以用来创建bean实例

今天在写程序的时候看见一个以前没有见过的注解(@Component),在网上查找过后,经过实践,决定把它记录下来。
1、@controller 控制器(注入服务) Controller层
用于标注控制层,相当于struts中的action层

2、@service 服务(注入dao) service层
用于标注服务层,主要用来进行业务的逻辑处理

3、@repository(实现dao访问)dao层
用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件.

4、@component 实体类(把普通pojo实例化到spring容器中,相当于配置文件中的)泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。

5、@Mapper
这个注解表示这个是一个mybatis的mapper类,dao 层

6、@Repository
@Repository注解修饰哪个类,则表明这个类具有对对象进行CRUD(增删改查)的功能,而且@Repository是@Component注解的一个派生品,所以被@Repository注解的类可以自动的被@ComponentScan 通过路径扫描给找到。(这也在一定程度上解释了,为什么被@Repository注解的类也能@Autowired)

组件扫描配置
在这里插入图片描述
在这里插入图片描述

4.1 注入属性:@Autowire and @Qualifler

@Autowired:根据属性类型进行自动装配

第一步把service和dao对象创建,在service和dao类添加创建对象注解

第二步在service注入dao对象,在service类添加dao类型属性,在属性上面使用注解

    @Serivcepublic class UserService {@Autowiredprivate UserDao userDao;public void add() {System.out.println("service add......");userDao.add();}}

@Qualifier:根据名称进行注入

这个@Qualifier注解的使用,和上面@Autowired一起使用

//添加注入属性注解
@Autowired  //根据类型进行注入
@Qualifiter(value = "userDaoImpl")  //根据名称进行注入
private UserDao userDao

@Resources:可以根据类型注入,也可以根据名称进行注入

@Resource(name = "userDaoImpl")  //根据名称进行注入
private UserDao userdao;

@Value:注入普通类型的属性

@Value(value = "abc")
private String username

4.2 完全注解开发

把配置文件的内容放到注解当中,省略bean当中的配置

开始接触Springboot ioc基本结束
在这里插入图片描述

五 AOP

5.1 基本概念
1,面向切面编程(方面) ,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务各部分之间的耦合度降低,提高程序的可重用性,同时提高开发的效率

通俗的描述就是:不通过修改源代码的方式,在主干功能里面添加新功能。

使用登录的例子说明AOP 相当于直接添加一个插件来实现某一个方面的功能。
在这里插入图片描述

5.2 AOP的底层原理

1,AOP底层使用动态代理

有两种情况动态代理

一,有接口的情况 使用JDK动态代理

创建接口实现类代理对象,增强类的方法
在这里插入图片描述
二。无接口的情况,使用CGLOB动态代理
创建子类的代理对象,增强类的方法
在这里插入图片描述

5.3 动态代理

代理模式的好处:

  • 可以使真实的角色的操作更加纯粹!不用去关注一些公共的业务
  • 公共也就是交给代理角色,实现业务的分工!
  • 公共业务发生扩展的时候,方便集中管理!

动态代理的 需要了解两个类:Proxy:代理,InvocationHabdler:调用处理程序

动态代理的好处:
可以使真实的角色的操作更加纯粹!不用去关注一些公共的业务,
公共也就交给代理角色!实现了业务的分工,
公共业务放生扩展的时候,方便集中管理!
一个动态代理类代理的是一个接口,一遍就是对应一类业务
一个动态代理类可以代理多个类,只要是实现了同一个接口即可!

5.4 AOP在spring当中的作用

提供声明式事务,允许用户自定义切面
横切关注点:跨越应用程序的方法和功能,与我们的逻辑业务没有关系,但是我们需要关注的部分,就是横切关注点,如:日志,安全,缓存,事务等等。。
方式一:使用spring的API接口,【主要是springAPI接口的实现】
方式二:自定义来实现AOP【主要是切面定义】
总结:为了实现不用修改源代码,用AOP的方式去实现增加新的一个切面,新增加一个业务,用注解的方式感觉实现起来的语法有点奇怪。

6、spring事务的操作

1,回顾事务

把一组业务当做一个业务来做;要么都成功,要么都失败

事务在项目开发中,十分的重要,涉及到数据的一致性问题,不能马虎

要确保完整性和一致性;

事务的ACID原则:

原子性 一致性

隔离性:多个业务可能操作同一个资源,防止数据损坏

持久性:事务一旦提交,无论系统发生什么问题,结果都不会再被受到影响,被持久化的写到存储器当中!
2,声明式事务

    <tx:advice id="txAdvice" transaction-manager="transactionManager"><!--给哪些方法配置事务配置事务的传播特性 new propagation--><tx:attributes><tx:method name="add" propagation="REQUIRED"/><tx:method name="delete" propagation="REQUIRED"/><tx:method name="update" propagation="REQUIRED"/><tx:method name="query" read-only="true"/><tx:method name="*" propagation="REQUIRED"/></tx:attributes></tx:advice><aop:config><aop:pointcut id="txPointCut" expression="execution(* cn.skyang.mapper.*.*(..))"/><aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/></aop:config>

spring中的事务管理

声明式事务:AOP

编程式事务:需要在代码中,进行事务的管理

思考:

为什么需要事务?

如果不配置事务,可能存在数据提交不一致的情况

如果我们不在Spring中去配置声明式事务,我们就需要在代码中手动去配置事务!

事务在项目的开发中十分重要,涉及到数据的一致性和完整性,不容马虎!!

六,整合mybatis

1,编写数据源配置

2,sqlSessionFactory

3,sqlSessionTemplate

写在spring-dao.xml中

    <!--    DataSource:使用Spring的数据源代替mybatis的配置:c3p0 dbcp druid我们这里使用的Spring提供的JDBC:org.springframework.jdbc.datasource--><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="196235qaz"/></bean><!--配置SessionFactory--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><!--绑定mybatis配置文件--><property name="configLocation" value="classpath:mybatis-config.xml"/><property name="mapperLocations" value="classpath:cn/skyang/mapper/*.xml"/></bean><!--SqlSessionTemplate就是我们使用的sqlSesson--><bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"><!--只能使用构造器注入sqlSessionFactory,因为它没有set方法--><constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg></bean>

在这里插入图片描述

4,需要给接口加实现类【】

5,将自己写发实现类,注入到Spring中

写在applicationContext.xml<import resource="spring-dao.xml"/><bean id="UserMapper" class="cn.skyang.mapper.UserMapperImpl"><property name="sqlSession" ref="sqlSession"/></bean><bean id="UserMapper2" class="cn.skyang.mapper.UserMapperImpl2"></bean>

6,测试使用即可


http://chatgpt.dhexx.cn/article/gv0fXPAc.shtml

相关文章

简单的spring项目搭建流程

一、搭建步骤 创建空maven项目pom文件导入相应依赖jar包创建包结构&#xff08;domain、test即可)创建JavaBean配置文件编写简单示例 二、开始 1、创建一个空的maven项目 2、在pom.xml文件中导入spring5依赖jar包 <dependency><groupId>org.springframework</…

Maven搭建Spring框架

Maven搭建Spring框架 一、前言二、准备工作1、IDE2、创建项目3、导入jar包 三、创建实体四、创建Spring配置文件五、测试结果结束语 一、前言 这一篇我会比较详细的将Maven搭建Spring框架的步骤记录下来&#xff0c;可能会有很多人说这里怎么不是SpringMVC,不是Spring Boot,单…

Spring 框架的搭建

以软件idea为例 第一步&#xff1a;配置lib包 配置lib包&#xff1a;首先在web里面的web-info里面创建一个lib包。 右键点击 web-info 然后把提前准备的jar包放入&#xff0c;如需要可以评论。 然后点击jar包 shift 全选 点击右键&#xff1a;如图 之后jar包前会呈小三角 …

springboot基础框架搭建

一、SpringBoot 开源&#xff0c;轻量级开发框架 为了解决企业级应用开发的复杂性而创建的&#xff0c;简化开发 如何简化开发的 基于POJO的轻量级和最小侵入性编程通过IOC&#xff0c;依赖注入和面向接口实现松耦合基于切面AOP和管理进行声明式编程通过切面和模板减少样式…

[Spring]Spring框架搭建详解

首先是框架结构图解 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:tx"http…

spring cloud 框架搭建

一、spring cloud简介 Spring Cloud为开发人员提供了用于快速构建分布式系统中某些常见模式的工具&#xff08;例如&#xff0c;配置管理&#xff0c;服务发现&#xff0c;断路器&#xff0c;智能路由&#xff0c;微代理&#xff0c;控制总线&#xff09;。分布式系统的协调产…

spring boot框架新手搭建

使用maven搭建基本的spring boot框架 先创建一个maven项目&#xff0c;基本流程可查看&#xff1a;https://blog.csdn.net/yuguiyang1990/article/details/8796726 …

spring框架介绍及搭建

介绍 Spring是一个开源框架&#xff0c;它由Rod Johnson创建。它是为了使企业应用开发更简单。Spring使用基本的JavaBean替代以前只可能由EJB完成的事情。 spring主要起到解耦合的作用 spring主要学习AOP和IOC概念 IOC :inverse of control 控制反转或者依赖注入 控制反转&…

spring boot项目框架的搭建

spring boot项目框架的搭建 一、实验目的要求二、实验环境三、实验内容任务一 JDK的安装与配置任务二 maven组件的安装与配置任务三 设置localRepository任务四 测试任务五 eclipse中的设置任务六 spring项目的构建与运行任务七 jsp页面的部署任务八 问题与解决方案 一、实验目…

spring 框架简介与搭建

Spring的一个最大的目的就是使J2EE开发更加容易。同时&#xff0c;Spring之所以与Struts、Hibernate等单层框架不同&#xff0c;是因为Spring致力于提供一个以统一的、高效的方式构造整个应用&#xff0c;并且可以将单层框架以最佳的组合揉和在一起建立一个连贯的体系。可以说S…

SpringBoot框架搭建

SpringBoot是一种开源&#xff0c;轻量级开发框架 为了解决企业级应用开发的复杂性而创建的&#xff0c;简化开发 如何简化开发的&#xff1f; 基于POJO的轻量级和最小侵入性编程通过IOC&#xff0c;依赖注入和面向接口实现松耦合基于切面AOP和管理进行声明式编程通过切面和…

Spring框架详解

简介 Spring5框架 内容介绍&#xff1a; 1.Spring概念 2.IOC容器 3.Aop 4.JDBCTEmplate 5.事物管理 6.Spring5新特性 一.Spring框架概述 1.概述 1.Spring框架是轻量级的JavaEE框架 2.Spring可以解决企业应用开发的复杂性 3.Spring有两个核心部分&#xff1a;IOC和Aop…

如何搭建一个Spring框架超详细

如何搭建一个Spring框架&#xff0c;首先我们要先了解Spring的核心构成部分 1.Spring 的构成 IOC 控制反转 spring 框架最核心的部分 DAO spring 对 访问数据库的支持 MVC spring 对 mvc设计模式的支持 ORM 对象关系映射 (数据库中的数据映射成对象的技术) 也有针对其它的ORM的…

Eclipse搭建Spring框架(绝对成功!)

花了许久才把Spring框架搭建完成&#xff0c;一把辛酸泪。。。。。。。。。。 一、首先下载好全部所需要的工具和jar包 1 安装 springsource-tool-suite: &#xff08;1&#xff09;打开eclipse-help-marketplace search中输入spring&#xff0c;下载 按install&#xff0c;…

Spring框架的介绍以及搭建

Spring框架的介绍以及搭建 1、框架和架构1.1、什么是框架1.2 架构的发展历程 2、Spring2.1、Spring框架的优势 3、IOC3.1、什么是IOC 4、Maven4、搭建Spring4.1、基于导入jar包和xml配置4.2、基于maven和xml配置4.2.1、本地搭建一个maven4.2.2、创建一个基于Maven的项目4.2.3、…

Spring 框架搭建

1 Spring 框架搭建 第一步&#xff1a;新建 Maven 项目、设置项目坐标以及Maven环境&#xff1a; 设置项目的名称和存放的工作空间&#xff1a; 第二步&#xff1a; 调整JDK版本 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEnc…

Spring框架介绍与搭建

文章目录 1. 简介1.1 什么是Spring1.2 为什么用Spring1.3 Spring5的特性 2. Spring框架核心2.1 IOC&#xff08;控制反转&#xff09;2.2 AOP(面向切面编程&#xff09;2.3 Spring 中 bean 的作用域2.4 Spring 中 bean 生命周期 3. Spring快速搭建3.1 官方提供的搭建方式3.2 使…

Spring框架搭建

Spring是一个轻量级的开源的控制反转&#xff08;IOC&#xff09;和面向切面编程&#xff08;AOP&#xff09;的框架&#xff0c;是很多程序员必须学的一个框架&#xff0c;所有我们使用他的第一个步骤就是导入框架&#xff0c;本文使用的是idea导入。 Spring有以下几个优点&am…

Python模块——glob模块详解

本文大纲 glob模块也是Python标准库中一个重要的模块&#xff0c;主要用来查找符合特定规则的目录和文件&#xff0c;并将搜索的到的结果返回到一个列表中。使用这个模块最主要的原因就是&#xff0c;该模块支持几个特殊的正则通配符&#xff0c;用起来贼方便&#xff0c;这个…

python—glob模块函数(搜索目录文件)

目录 glob函数 iglob函数 glob模块函数用于从目录通配符搜索中生成文件列表&#xff0c;可以快速获取一定格式的文件夹或文件路径的列表。glob匹配模式较少&#xff0c;一共有三种通配符&#xff1a;*、?、[]&#xff0c;属于轻量级。路径分隔符(Unix的/&#xff0c;Windows…