Spring:基本概念

2023-11-20

Spring是一款全栈式轻量级开源框架,主要解决的是程序间耦合的问题。

两大核心:

  • 控制反转IOC
  • 面向切面编程AOP

能够整合众多著名的第三方框架和类库。是实际开发中使用最多的企业应用级开源框架。

2017年9月发布了spring的最新版本spring5.0通用版

spring并不能帮你解决具体的代码问题,spring的优势在于:

  • 方便解耦,简化开发
  • AOP编程的支持
  • 声明式事务的支持
  • 方便程序的测试
  • 方便集成各种优秀框架
  • 降低JavaEE API的使用难度
  • spring的java源码是经典学习案例,设计精妙

Spring体系结构

其他部分的运行都要依赖于Core Container,即核心容器IoC。


程序间的耦合

耦合:简单来说就是程序间的依赖关系,包括

  • 类之间的依赖
  • 方法之间的依赖

解耦:降低程序之间的依赖关系。实际开发中应该做到:编译期不依赖,运行时才依赖。

类依赖的解耦思路举例:

  • 第一步:使用反射来创建对象,而避免使用new关键字,比如在注册数据库驱动时:
    • 如果是用DriverManager.registerDriver(new com.mysql.jdbc.Driver),就会导致类之间的依赖
    • 而如果使用Class.forName("com.mysql.jdbc.Driver")来注册驱动,那么依赖的就只是一个字符串。但是这种方式也会导致字符串内容被写死。
  • 第二步:通过读取配置文件来获取要创建对象的全限定类名,解决写死的问题。

控制反转(IOC)

含义是把创建对象的控制权交给了工厂,所以叫控制反转,它降低了程序中类之间的耦合。


面向切面编程(AOP)

AOP(Aspect Oriented Programming):面向切面编程。简单来说就是把各个业务逻辑代码中重复的部分独立出来,以此来降低各业务逻辑之间的耦合性,主要解决的是方法之间的耦合问题。

aop的主要实现技术:动态代理,对已有方法进行统一增强。spring会根据是否实现了接口来自动选择用哪种代理方式。

切面是指切入点和通知/增强的结合。

 

  • 切入点:被加入拦截的连接点(即加入拦截的方法)
  • 通知:即在代码增强时所执行的代码,这些代码通常都是来自一个通知类(实现公共代码的类)。
    • 前置通知
    • 后置通知
    • 异常通知
    • 最终通知
    • 环绕通知


Spring的声明式事务控制

javaee体系是进行分层开发的,事务会交由业务层来控制。spring框架为我们提供了一组事务控制的接口,并且它的事务控制是基于aop的,既可以用编程的方式来实现,也可以通过配置来实现。

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

Spring:基本概念 的相关文章

  • ROS中tf树,frame未连接的问题。

    今天调节双舵轮的AGV xff0c 一开始无法导航 xff0c 由于学生有些忙 xff0c 没做urdf 我就直接发布静态坐标变换 xff0c odom到basefootprint是里程计自己编写 xff0c 问题是加了laser base
  • Spring:基本概念

    Spring是一款全栈式轻量级开源框架 主要解决的是程序间耦合的问题 两大核心 控制反转IOC 面向切面编程AOP 能够整合众多著名的第三方框架和类库 是实际开发中使用最多的企业应用级开源框架 2017年9月发布了spring的最新版本sp
  • 如何在执行时打印 python 脚本的每一行(包括控制台)?

    我想打印正在执行的 python 脚本的每一行 以及每行正在执行时控制台的日志 例如 对于此脚本 import time print hello time sleep 3 print goodbye 我希望它在控制台中生成以下内容 line
  • 框架中的 Python Tkinter 标签

    我想在 tkinter 的框架内放置一个标签 但我不知道如何实际将其放入其中 import tkinter from tkinter import W tkinter Tk W geometry 800x850 0 0 W configur
  • iOS UIView 旋转后获取框架

    我正在尝试获取我的尺寸UIView方向改变后 在我的视图控制器中我实现didRotateFromInterfaceOrientation 并打电话setNeedsLayout 在我看来 在我看来layoutSubviews方法中 它尝试根据
  • Frame.__init__ 是做什么的?

    在下面的代码中 第 5 行是什么Frame init 做 有人可以解释一下它背后的概念吗 多谢 from Tkinter import class AppUI Frame def init self master None Frame in
  • boundingRectWithSize 不考虑自动换行

    我创建一个 UITextView 向其中添加文本 然后将其放入视图中 使用容器 UITextView lyricView UITextView alloc initWithFrame screen lyricView text NSStri
  • 在 WPF 框架上设置 ScrollViewer(用于垂直滚动)的正确方法?

    有谁知道在这样的框架上定义垂直滚动条之间的区别
  • 全屏 Swing 框架在 Linux 中无法正确聚焦(Windows 没问题)

    我有一个应用程序 它生成几个全屏无装饰框架 基本上控制所有屏幕空间 我的问题是 某些框架上的某些按钮被设计为 切换屏幕 这基本上意味着显示另一个框架而不是当前框架 我在 Windows 中使用以下方法轻松实现了这一点 target setV
  • 使用 OpenCV 从 .avi 视频获取帧

    include cv h include highgui h int main int argc char argv CvCapture capture 0 IplImage frame 0 capture cvCaptureFromAVI
  • 在 iPhone 中重新定位后,框架/窗口尺寸“不正确”

    在我的 iPhone OS 应用程序中 我想要 需要 观察设备方向的变化 以便重新排列屏幕的某些部分 我使用的方法是使用CGRect frame UIScreen mainScreen applicationFrame获取屏幕尺寸 并从那里
  • ios 7 UiView 框架问题

    我在 iOS6 和 iOS7 中运行相同的应用程序 其中有导航栏 它在 iOS6 上运行良好 但在 iOS7 中 所有视图都有点向上 就像根本没有考虑导航栏一样 我尝试更改模拟指标选项中的顶栏属性 但它不起作用 在 iOS6 中 它从导航栏
  • delphi exe 和 dll 无需使用运行时包构建

    对于我的上一个项目 我在 Delphi 应用程序中使用了许多框架 所以我决定创建 dll 并将它们放入 dll 中 全部在 Delphi 中创建 我浏览了许多网站并提出了有效的代码 但对于该示例 我必须使用以下命令编译应用程序和 dll使用
  • 如何在 Tkinter 中获得带有滚动条的框架?

    我想要一个Frame 用户可以根据应用程序的需要添加任意数量的文本字段 该应用程序以一个文本字段和该文本字段下方的一个按钮开始 当用户按下按钮时 新的文本条目将添加到第一个文本条目下方 这可能会重复无数次 在窗口的中间 会有一个Text小部
  • 上移一帧,调试R环境

    在调试函数时 我想移动到父框架并查看那里的一些变量 我该怎么做呢 这是一个示例 f lt function x lt 1 g x 1 g lt function z y z 2 return y 然后我使用调试这两个函数debug g an
  • 如何通过我的切换帧函数将 Tkinter 条目值从一个帧传递到另一个帧

    我的 Tkinter 应用程序添加了笔记本 在笔记本内我想使用按钮切换框架 实现了笔记本开关和框架开关 当我单击 确定 按钮时 我想将笔记本的一帧输入输入到另一帧enter code here 我尝试将值作为框架类初始化的参数传递 将输入字
  • 获取嵌套在 JavaScript 中的 Frame 内的 iframe 内的元素值?

    我的 php 主页面有 2 个框架 第二个框架内有 iframe 我想从第一帧访问 iframe 文档上元素的值 我尝试这样 var frame1 parent frames 1 var frame2 frame1 document get
  • Swift 使滚动视图内容居中

    当用户当前位置移至屏幕框架之外时 我尝试将滚动视图视图居中并移动框架 目前我有一个 PDF 正在显示用户的当前位置 我正在计算框架和滚动视图的 ZoomScale 以在 PDF 视图上显示当前位置 我已经实现了这个功能 它运行完美 当用户移
  • UIView框架、边界和中心

    我想知道如何以正确的方式使用这些属性 我认为 frame可以从我正在创建的视图的容器中使用 它设置相对于容器视图的视图位置 它还设置该视图的大小 Also center可以从我正在创建的视图的容器中使用 此属性更改视图相对于其容器的位置 最
  • 删除框架,同时保留 pyplot 子图中的轴

    我正在创建一个包含 3 个子图的图形 并且想知道是否有任何方法可以移除它们周围的框架 同时保持轴就位 如果您想删除轴脊 但不想删除其他信息 刻度 标签等 您可以这样做 fig ax plt subplots 7 1 sharex True

随机推荐

  • SpringCloud使用Zookeeper作为服务注册发现中心

    本篇文章主要记录SpringCloud使用Zookeeper作为服务注册发现中心 通过服务提供者和消费者为例 来真正掌握zk注册中心 目录 一 搭建服务提供者 1 创建cloud provider payment8004项目 2 修改配置
  • BCrypt密码加密的简单使用

    一 BCrypt基础 在一个项目中 只要涉及用户的登陆注册 就涉及到用户密码的保护 用户的密码存在数据库是对管理员是透明的 所以为了防止管理员泄露密码 提高用户密码的安全性 我们通常会对用户密码进行加密后再存入数据库 目前MD5与Bcryp
  • 微信小程序瀑布流布局

  • Spring Boot:从入门到实践的全面指南

    文章目录 1 Spring Boot简介及特性 1 1 简介 什么是Spring Boot 1 2 特性 Spring Boot的优势与特点 1 3 四大核心 Spring Boot的核心组成 2 Spring Boot入门案例 2 1 S
  • 重启CDH服务

    找到cm的目录 cd opt cm 5 13 2 etc init d 查看sever状态 cloudera scm server status 重启server cloudera scm server restart 再次查看sever状
  • Micropython开发篇三--基于F411 CE的移植编译

    Micropython开发篇三 基于F411 CE的移植编译 最近在学操作系统 RTOS与Linux 对Micropython有些新的认知 回头又复习了一下Micropython 简直要不要这么优秀 希望通过这篇文章能带给大家不一样的Mic
  • Python - 函数注解

    Python3提供一种语法 用于为函数声明中的参数和返回值附加元数据 或者也可以称之为注释 def my function Something about your function pass 文档注释可以通过下面这种方式查看 print
  • MyBatis高级查询:一对多映射collection集合实现机构-用户-角色-菜单三级嵌套查询

    学习自MyBatis从入门到精通 嵌套查询 会执行额外的SQL语句 团队网站的结构关系我是做成了机构用户角色菜单三层嵌套查询 今天一天进行了实现 遇到的错误真的很多 我们知道association collection关联的嵌套查询这种方式
  • TCP协议、VLSM、CIDR思维导图

    ICMP 网络层协议 用来在网络设备间传递各种差错 控制 查询等信息 对于收集各种网络信息 诊断和排除各种网络故障
  • CocosCreator列表scrollview滑动速度的修改,鼠标滚动速度修改

    由于cocos creator 在pc端 使用scrollview 鼠标滚动速度太慢 原文地址 CocosCreator列表滑动速度的修改 简书CocosCreator列表滑动速度的修改 简书引擎版本 2 2 2 之后升级的2 4 0直接可
  • Android发送POST网络请求

    参考链接 Android 网络请求 网络请求 Okhttp 51CTO博客 android 网络请求 项目中需要通过发送网络请求获取需要显示的数据内容 请求地址和requestbody如上图所示 网络请求用 implementation c
  • Java顺序表

    1 顺序表的定义 顺序表是用物理地址连续存储单元依次存储元素的线性数据结构 一般底层采用数组存储 其中Arraylist也是一个动态修改的数组 于此大致相同 在计算机科学中 数组是由一组元素 值或变量 组成的数据结构 每个元素有至少一个索引
  • JSONUtils

    package com xiolift mdm common util import com alibaba druid util StringUtils import com alibaba fastjson JSON import co
  • SpringBoot 集成 Mybatis

    SpringBoot 集成 Mybatis 详细教程 只有操作 没有理论 仅供参考学习 一 操作部分 1 准备数据库 1 1 数据库版本 C WINDOWS system32 gt mysql V mysql Ver 8 0 25 for
  • Python:sklearn数据预处理中fit(),transform()与fit_transform()的区别

    一 前提 sklearn里的封装好的各种算法使用前都要fit fit相对于整个代码而言 为后续API服务 fit之后 然后调用各种API方法 transform只是其中一个API方法 所以当你调用transform之外的方法 也必须要先fi
  • 送书|入门Python之后还是搞不定面试、做不来项目,推荐读读这本书

    又到了每周三送书的时刻啦 本周送书 Python工匠 Python 能干的事情实在太多了 掰着指头数有点不够用 Web 开发 数据分析 网络爬虫 自动化运维 后台开发 机器学习 如果你知道主攻哪个方向 只需重点去学习 不过 不论哪个方向 P
  • 阿里云sls日志服务的简单监控 php实现

    欢迎加入 新群号码 99640845 由于工作需要最近接触了阿里云的sls日志服务 写了一个基于阿里云sls日志服务和SDK的简单的监控脚本 首先需要开通阿里云的日志服务并且可以通过控制台读取相应日志 这里不就不详细说了 http blog
  • Qemu-KVM基本工作原理分析

    1 理解KVM与Qemu的关系 我们都知道开源虚拟机KVM 并且知道它总是跟Qemu结合出现 那这两者之间有什么关系呢 首先 Qemu本身并不是KVM的一部分 而是一整套完整的虚拟化解决方案 它是纯软件实现的 包括处理器虚拟化 内存虚拟化以
  • 斜体文本测试

    加粗样式
  • Spring:基本概念

    Spring是一款全栈式轻量级开源框架 主要解决的是程序间耦合的问题 两大核心 控制反转IOC 面向切面编程AOP 能够整合众多著名的第三方框架和类库 是实际开发中使用最多的企业应用级开源框架 2017年9月发布了spring的最新版本sp