当前位置: 首页 > news >正文

Spring笔记(1):概述

1、什么是Spring?

  • Spring是最受欢迎的企业级Java应用程序开发框架,使用它创建性能好、易于测试、可重用的代码。
  • Spring是一种轻量级的框架。
  • Spring框架的核心特性是开发任何Java应用程序,其目标是使得J2EE开发变得更容易,通过启用基于POJO模型来编程实践。

2、Spring的三层架构

  • 表现层:web层,其常见的设计模型为MVC(Moudle、View、Controller)
  • 业务层:service层
  • 持久层:dao层

3、Spring的优良特性

  • 非侵入式: 不依赖Spring的API。
  • 控制反转: IOC——Inversion of Control,是指Spring来控制创建新对象。
  • 依赖注入: DI——Dependency Injection,通过配置赋值,不需调用set方法设置。
  • 面向切面编程: AOP——Aspect Oriented Programming。
  • 容器: Spring是一个容器,它包含并且管理应用对象的生命周期。
  • 组件化: Spring实现了使用简单的组件配置组合成一个复杂的应用。在Spring中使用XML和Java注解组合这些对象。
  • 一站式: IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库。

4、Spring框架的优点

  • 可以使开发人员使用POJOs开发企业级的应用程序,可以选择使用一个稳定的应用程序服务器如Tomcat或其它的应用程序服务器。
  • Spring在一个单元模式中是有组织的,即使包和类的数量非常大,只需要热加载需要的工作包。
  • Spring容器能够加载更多的优秀开源框架技术。
  • 测试更容易,使用JavaBean-style POJOs,使用依赖注入注入测试数据。
  • Spring的web框架是一个MVC框架,MVC模式导致应用程序的不同方面分离,同时提供这些元素之间的松散耦合。
  • Model负责封装了应用程序数据,通常它们由POJO类组成。
  • View负责渲染模型数据,一般来说它生成客户端浏览器可以解释HTML输出。
  • Controller负责处理用户请求并构建适当的模型,并传递给视图进行渲染。
  • Spring封装了难度较高的JavaEE的API。
  • 轻量级的IOC容器
  • Spring提供一直的事务管理接口,可向下扩展到本地事务(使用一个单一数据库)并扩展到全局事务(如JTA)

5、依赖注入DI
依赖注入是控制反转的一种,当编写一个复杂的Java应用程序时,应用程序应该尽可能独立于其它java类,增加这些类可重用性。当单元测试时,可以使它们独立于其他类进行测试。

依赖注入是什么?
依赖: 是两个类之间相关联
注入: IOC携带类B的信息赋值给类A

如何实现依赖注入?
1、通过向构造函数传参实现
2、通过使用setter方法修改参数

6、面向切面编程AOP

  • 一个程序中跨越多个点的功能被称为横切关注点,这些横切关注点在概念上独立于业务逻辑,例如日志,声明事务,缓存等。
  • 在OOP中模块化的关键单元是类,而AOP中模块化的关键单元是方面。
  • AOP提供面向方面的程序设计,可以定义诸如方法拦截器和切入点等,从而实使实现功能的代码彻底解耦。

7、Spring框架的特点

  • 方便解耦,简化开发: 将所有对象的创建和依赖关系的维护交给Spring管理。
  • 方便集成框架: Spring不排斥其它框架,内部提供了Struts2,Hibernate,MyBatis等框架的支持。
  • 降低J2EE API的使用难度: Spring对JDBC、JavaMail、远程调用等API进行封装。
  • 方便测试: Spring支持JUnit4,可以方便通过注释测试Spring程序。
  • AOP编程的支持: Spring提供面向切面编程,可以实现对程序进行权限拦截和运行监控等功能。
  • 声明式事务的支持: 只需要通过配置完成对事务的管理。
http://www.lryc.cn/news/22932.html

相关文章:

  • 工程机械焊接件焊接结构件三维扫描检测外观质量控制-CASAIM三维扫描检测仪
  • 使用linux部署项目步骤
  • pt02-list-tuple-dir
  • 高端电器新十年,求解「竞速突围」
  • [Android Studio] Android Studio使用keytool工具读取Debug 调试版数字证书以及release 发布版数字证书
  • 2023年金三银四必备软件测试常见面试题1500问!!!【测试思维篇】
  • 推荐四款自用的电脑神器
  • CSDN 竞赛 32 期
  • 【路径规划】基于前向动态规划算法在地形上找到最佳路径(Matlab代码实现)
  • spring boot maven打包jar包太大,怎么办?这个方法解决你的烦恼
  • Spring之AOP理解及使用
  • 微信小程序和webview使用postMessage交互
  • pytorch-自动求导机制,构建计算图进行反向传播,需要注意inplace操作导致的报错,梯度属性变化
  • 【Project】项目管理软件学习笔记
  • 【算法设计-分治思想】快速幂与龟速乘
  • Kafka(十一) 如何保证数据的不重复和不丢失
  • 解决树莓派 bullseye (11) 系统无法通过 xrdp 远程连接的问题
  • 微信公众号历史作品定向采集
  • Vue学习笔记(3)
  • Marshmallow 库
  • 【BN层的作用】论文阅读 | How Does Batch Normalization Help Optimization?
  • re.sub()用法的详细介绍
  • 【Python数据挖掘入门】2.2文本分析-中文分词(jieba库cut方法/自定义词典load_userdict/语料库分词)
  • Meta利用视觉信息来优化3D音频模型,未来将用于AR/VR
  • openlayers加载离线地图并实现深色地图
  • socket,tcp,http三者之间的区别和原理
  • 红日(vulnstack)1 内网渗透ATTCK实战
  • ik 分词器怎么调用缓存的词库
  • ROS1/2机器人操作系统与时间Time的不解之缘
  • 华为OD机试真题2022(JAVA)