Spring学习总结

2023-11-14

因为是学习总结 所以参考了很多资料做的博客 如果有侵权 请联系我。写的不对的欢迎指吐舌头

      Spring:  -开源的轻量级框架 

  Spring核心: 

     IOC(控制反转控,制反转还有一个名字叫做DI(Dependency Injection),中文意思叫依赖注入。)-------Spring IOC是Spring中最核心的部分,是以Bean的方式来组织和管理Java应用中的各种组件,提供配置层次的解耦。所有的Bean都由Spring BeanFactory根据配置文件生成管理。ApplicationContext是BeanFactory的加强版,提供了更多的功能,如自动创建,国际化等。
     AOP:   Spring AOP也是Spring的核心技术,AOP擅长处理一些具有横切性质的系统服务,如事务管理,安全检查,缓存等。Spring并没有提供完整的AOP实现,Spring侧重于AOP实现与Spring IOC容器之间的整合,因此Spring AOP通常和Spring IOC一起使用。

为什么使用Spring :

1:降低组件之间的耦合度,实现各层之间的解耦 

2:可以使用容器提供的众多服务。如: 

--事务管理服务 

--JMS

--Spring core核心服务

--持久化服务

--其他

3:提供了单例模式支持。开发人员不需要自己编写实现代码

4:提供了AOP技术。实现如:权限拦截,运行监控等功能

5:提供了众多的辅助类。如JDBC Template,HIbernate Template

6:对主流的应用框架提供了集成支持。集成Struts,JPA,Hibernate。

7:缺点:目前不支持集群

spring模块:
spring核心容器(Core): BeanFactory提供了组件生命周期的管理,组件的创建,装配,销毁等功能
SpringContext:ApplicationContext,扩展核心容器,提供事件处理、国际化等功能。它提供了一些企业级服务的功能,提供了JNDI,EJB,RMI的支持。
springAOP: 提供切面支持
SpringDAO: 提供事务支持,JDBC,DAO支持
SpringORM: 对流行的O/R Mapping封装或支持
springWeb支持struts集成
springMVC自带的mvc框架
依赖注入 IOC:开发思想--- 高内聚低耦合( 一个类中紧密相连,不同类最好不要关联紧密
IOC底层原理:
    1.xml配置文件
    2.dom4j解析xml
    3.工厂设计模式
    4.反射
一.setter注入
通过类的set方法,将xml中的参数注入到对象中,
适用于初始化,因为每次加载,都会调用ApplicationContext方法
步骤 :
1.在xml中配置方法
 
注意: set  list 都是value注入,map是entry注入
   scope="prototype"  作用范围 将单一bean的定义限制而在任意数量的对象实例
2.class对应类中,给参数设置set方法,
3.使用ApplicationContext得到的对象调用方法就可以了
 

二.构造注入

与set注入一样,xml通过构造方法给赋值对象,
set注入和构造注入的区别?
a) setter注入更加的直观,自然,方便一些
b)在参数过多的情况下,构造注入就更加的繁琐,臃肿,根据代码规范,构造参数内最好不要写逻辑代码,参数也不要超过三个
c)构造注入的好处就是: 可以在某些情况下决定参数的注入顺序
主流方式 :setter注入为主,构造注入为辅,没有依赖关系的注入就用构造注入
   而有其它依赖关系的注入,就考虑 setter注入
构造注入的步骤 :
1. 在类中添加构造方法, 注意在 4.2版本后,多个构造方法是不会出现错误的,也可以用index下标去决定使用哪一个构造方法
2. 配置 xml文件

三:基于注解的主动装配

( 2 ) @Controller:web层
( 3 ) @Service:service层
( 4 ) @Repository:Dao层
@Autowired 标注成员变量时,不需要有 set方法 
@Resource 默认按名称类匹配的,它是 JDK 提供的
注解装配在默认情况下是不开启的,为了使用注解装配,我们必须在 Spring 配置文件中配置  <context:annotation-config/> 元素。

 p命名空间和c命名空间

p是依赖于set注入的,c呢是依赖构造注入的
p约束:
配置 :
<bean id="user" class="xxx.Studentr" p:age="23" p:username="张三"  p:email=" zhangsan@pbdevj.com " />
<bean id="userBiz" class="biz.impl.UserBiz" p:dao-ref="userDao" />
c约束:
<bean id="magician" class="xxx.Student"
        c:age="11"
        c:username="李四"
        c:email=" magicWand@163.com " />

AOP:

什么是aop?

AOP(Aspect Oriented Programming) 面向切面编程
通过预编译方式和运行动态代理实现程序功能的统一维护
作用:能够无入侵性完成代码
切面:指在执行某些方法时,进入断点(切面)模式,在之前,之后或出现异常等做一些处理,
为什么会出现aop?
Aop和ioc都是解决代码的耦合性,可以增强代码的扩展性和可维护性
AOP实现可分为两类:

  1. 预编译方式 :在编译的时候已经做好了aop处理

  2. 运行期方式 :在运行时做aop处理

那么什么是Aspectj ?

Aspectj 是一个面向切面的框架,Aspectj定义了AOP语法,Spring AOP底层也是使用了Aspectj的框架来实现操作的。

Spring AOP 和Aspectj的关系?

二者都是AOP技术
二者处理方式不一样:
Aspectj:在编译java代码时,(依赖ajc编译器)编译时增强,编译时增强。( 属于静态织入) ;
Spring AOP:在运行时动态修改类(动态代理),生成新类,称为运行时增强(动态织入)
使用静态织入的方式性能要比动态高,但是动态织入更加方便
Spring AOP原理: 采用动态代理模式。
  Spring AOP采用动态代理的过程:
(1) 将切面使用动态代理的方式动态织入到目标对象(被代理类),形成一个代理对象;
(2) 目标对象如果没有实现代理接口,那么Spring会采用CGLib来生成代理对象,该代理对象是目标对象的子类;(3) 目标对象如果是final类,并且也没实现代理接口,就不能运用AOP。

AOP操作术语

Joinpoint(连接点): 类里面可以被增强的方法,这些方法称为连接点
Pointcut(切入点):所谓切入点是指我们要对哪些Joinpoint进行拦截的定义.
Advice(通知/增强):所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
Aspect(切面): 是切入点和通知(引介)的结合
Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field.
Target(目标对象):代理的目标对象(要增强的类)
Weaving(织入):是把增强应用到目标的过程.
把advice 应用到 target的过程
Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类

Spring容器中的Bean

对于开发者来说,开发者使用Spring框架主要是做两件事:①开发Bean;②配置Bean。对于Spring框架来说,它要做的就是根据配置文件来创建Bean实例,并调用Bean实例的方法完成"依赖注入"——这就是所谓IoC的本质。

Spring的生命周期 

bean的实例化: 
1:当作用域范围为singleton时,在初始化Spring容易的时候实例化bean实例。 
---1:如果lazy-init的值为true,则为延迟bean的实例化,即在Spring容器启动时不实例化bean的对象 
2:当作用域范围为prototype时,在调用Spring的getBean的方法时实例化bean对象
注入依赖对象可以采用手工装配或者自动装配,在实际应用中建议采用手工装配。因为自动装配会产生未知情况,开发人员无法预见最终的装配结果。
bean的属性
id                       命名bean,id属性值,不能包含特殊符号
class                  创建对象所在类的全路径
name                功能与id一样,但是name可以包含特殊符号
scope                指定bean的作用域
        1.singleton:默认单例模式
        2.prototype:多例
        3.request:创建对象放入request作用域
        4.session:同上
        5. global session :同上

事物拦截器的实现原理。

spring中的事务管理是通过AOP代理来实现的,对被代理对象的每个方法进行拦截,
在方法执行前启动事务,方法执行完后根据是否有异常和异常的种类进行提交或回滚。

事务的四大特性:ACID

    原子性(Atomicity)事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用 
    一致性(Consistency) 一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏
     隔离性(Isolation) 可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏 
    持久性(Durability) 一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring学习总结 的相关文章

随机推荐

  • Qtcreator中常用快捷键总结

    转载自 https blog csdn net wuli dear wang article details 82143152 Qtcreator中常用快捷键总结 F1 查看帮助 F2 跳转到函数定义 和Ctrl 鼠标左键一样的效果 Shi
  • 入门系列之Kubernetes部署

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由林岑影 发表于云 社区专栏 容器实例服务 Container Instance Service CIS 可以帮您在云上快捷 灵活的部署容器 让您专注于构建程序和使用容器而非管理
  • 五分钟带你一步一步去了解Spring Boot是如何实现自动配置

    前言 在使用传统的 Spring 去做 Java EE 应用开发时 在项目中会出现大量的 XMl配置文件 使 Java EE 项目变得笨重且繁琐 从而导致开发和部署上的效率降低 Spring Boot 的出现就是简化 Spring 应用的搭
  • 计算机原码反码补码的理解和作用

    摘要 本文旨在深入探讨整数在计算机中的二进制表示形式以及涉及的源码 反码和补码的运算原理 我们将介绍二进制数的基本概念 解释源码 反码和补码的定义和转换规则 并探讨在运算过程中它们的作用和区别 通过详细的解释和示例 我们希望读者能够全面理解
  • Vue项目引用百度地图并实现搜索定位等功能

    Tip 本篇文章为案例分析 技术点较多 所以篇幅较长 认真阅览的你一定会学到很多知识 前言 百度地图开放平台 给开发者们提供了丰富的地图功能与服务 使我们的项目中可以轻松地实现地图定位 地址搜索 路线导航等功能 本文给大家介绍如何在vue项
  • 继续发布VS2005下DataGridView 的多种样式列控件

    VS2005已经发布好久了 但对DataGridView 的使用 在网上的资料还比较少 DataGridView 无论是美观与功能方面都是DataGrid所不能比的 应该说DataGridView 不是DataGrid的升级 因为DataG
  • 大范围自动化时序软件LiCSBAS安装教程

    1 配置虚拟环境 1 1创建虚拟环境 注意随着版本的提升 python现在是3 9 装不上 需要降python改为3 8版本即可 conda create n licsbas python 3 8 13 1 2 安装LiCSBAS所需要的库
  • 华为ensp模拟校园网/企业网实例(精品拓扑图)

    文章简介 本文用华为ensp对企业网络进行了规划和模拟 也同样适用于校园 医院等场景 如有需要可联系作者 可以根据定制化需求做修改 作者简介 网络工程师 希望能认识更多的小伙伴一起交流 可私信或QQ号 1686231613 目录 摘 要 第
  • 华为发布数字资产继承功能

    在华为开发者大会2023 HDC Together 上 华为常务董事 终端BG CEO 智能汽车解决方案BU CEO余承东正式发布了数字资产继承功能 HarmonyOS提供了安全便捷的数字资产继承路径 在鸿蒙世界中 我们每个人在每台设备 应
  • AI技术进阶的75道面试题

    本文转载自AI科技大本营 整理 AI科技大本营 出品 AI科技大本营 公众号id rgznai100 导语 正值求职 跳槽季 无论你是换工作还是找实习 没有真本事都是万万不行的 可是如何高效率复习呢 之前我们给大家推荐了一份 Python
  • 如何把 Git Submodule 变成普通文件夹

    转载于此文章 记录一下 感觉最重要的是把原来的submodule中的 git删除掉 先删除 Git Submodule 删除所有相关的git配置文件即可 再把 submodule 中的文件添加到主仓库 删除 Git submodule 的命
  • MATLAB求矩阵最大、最小值

    矩阵求最大 最小值用max min函数 max A min A 返回行向量 求每列最大 最小值 max A B min A B 返回一个A B中比较大 较小元素组成的矩阵 max A dim min A dim dim 1 比较A的列 di
  • PowerOJ 2543: 赛场布置

    题目链接 对于每个点 它可以选择男或者女 如果要加上的贡献 那么相邻的一定得是异性才可以 所以 对相邻的 我们可以考虑成 然后 我们对于点坐标的的奇偶性分别讨论即可 当然 还需要考虑的贡献 然后就是全选减去最少割去的即可 include
  • iOS面试题(2.类变量的@protected,@private,@public,@package声明各有什么含义)拓展:常用框架和第三方框架

    2 类变量的 protected private public package声明各有什么含义 private 作用范围只能在自身类 protected 作用范围在自身类和继承自己的子类 默认 public 作用范围最大 可以在任何地方被访
  • nginx匹配以XXX结尾的

    匹配以do结尾的所有文件 如http 192 168 126 168 8080 delivery transportPlanData do startRelease 2019 07 06 endRelease 2019 07 06 sear
  • 初识Composer

    文章目录 依赖管理工具Composer 参考 1 简介 2 安装Composer 3 声明和安装依赖 4 自动加载 5 模块仓库 依赖管理工具Composer 参考 Composer 中文网 Packagist 中国全量镜像官方 地址htt
  • cygwin的git vscode中的使用

    背景 需要用到cygwin 编辑器是vscode 版本 vscode 版本1 55 cygwin版本2 11 2 1 cygcheck c cygwin cygwin的git2 17 cygcheck c git vscode报错 open
  • 算法篇-------贪心2

    文章目录 题目1 活动选择 题目2 无重叠区间 题目3 最多可以参加的会议数目 题目4 去除重复字母 题目5 移掉K位数字 题目6 拼接最大数 题目1 活动选择 有n个需要在同一天使用同一个教室的活动a1 a2 an 教室同一时刻只能由一个
  • linux指令_龙红云

    一 基础指令 1 ls指令 ls 列出当前目录下的所有文件 文件夹的名字 ls root 列出root下的所有文件 文件夹的名字 ls l 以详细列表的形式展示 ls la ls a 显示所有文件 文件夹 包含了隐藏文件 文件夹 ls lh
  • Spring学习总结

    因为是学习总结 所以参考了很多资料做的博客 如果有侵权 请联系我 写的不对的欢迎指出 Spring 开源的轻量级框架 Spring核心 IOC 控制反转控 制反转还有一个名字叫做DI Dependency Injection 中文意思叫依赖