首页 > 其他分享 >Spring入门(一)--相关概念理解

Spring入门(一)--相关概念理解

时间:2022-10-04 16:36:50浏览次数:45  
标签:容器 依赖 入门 -- Spring 对象 IOC 注入

1、什么是Spring?

  • Spring 框架是一个开源的Java平台,它最初是由Rod Johnson编写的,并且于2003年6月首次在Apache 2.0 许可下发布。
  • Spring 是轻量级的框架,其基础版本只有2MB左右的大小。
  • Spring 框架的核心特性是可以用于开发任何Java应用程序,但是在Java EE平台上构建web应用程序是需要扩展的。Spring 框架的目标是使J2EE开发变得更容易使用,通过启用基于POJO编程模型来促进良好的编程实践。

2、Spring Framework

Spring 基础框架,可以视为Spring基础设施,基本上任何其他Spring项目都是以Spring Framework为基础的。

Spring Framework特性:

  • 非侵入式:使用 Spring Framework 开发应用程序时,Spring 对应用程序本身的结构影响非常小。对领域模型可以做到零污染;对功能性组件也只需要使用几个简单的注解进行标记,完全不会破坏原有结构,反而能将组件结构进一步简化。这就使得基于Spring Framework开发应用程序时结构清晰、简洁优雅。
  • 控制反转:IOC——Inversion of Control,翻转资源获取方向。把自己创建资源、向环境索取资源变成环境将资源准备好,我们享受资源注入。
  • 面向切面编程:AOP——Aspect Oriented Programming,在不修改源代码的基础上增强代码功能。
  • 容器:Spring IOC 是一个容器,因为它包含并且管理组件对象的生命周期。组件享受到了容器化的管理,替程序员屏蔽了组件创建过程中的大量细节,极大的降低了使用门槛,大幅度提高了开发效率。
  • 组件化:Spring 实现了使用简单的组件配置组合成一个复杂的应用。在 Spring 中可以使用 XML和 Java 注解组合这些对象。这使得我们可以基于一个个功能明确、边界清晰的组件有条不紊的搭建超大型复杂应用系统。
  • 声明式:很多以前需要编写代码才能实现的功能,现在只需要声明需求即可由框架代为实现。
  • 一站式:在 IOC 和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库。而且Spring 旗下的项目已经覆盖了广泛领域,很多方面的功能性需求可以在 Spring Framework 的基础上全部使用 Spring 来实现。

Spring Framework五大功能模块:

image

  1. Core Container 核心容器:在 Spring 环境下使用任何功能都必须基于 IOC 容器。
  2. AOP:面向切面编程
  3. Test:提供了对 junit 或 TestNG 测试框架的整合。
  4. Data Access/Integration:提供了对数据访问/集成的功能。
  5. Spring MVC:提供了面向Web应用程序的集成功能。

3、IOC

Inversion of Control 是控制反转的意思,这是一种面向对象编程的设计思想。在不采用这种思想的情况下,我们需要自己维护对象与对象之间的依赖关系,很容易造成对象之间的耦合度过高,在一个大型的项目中这十分的不利于代码的维护。IoC则可以解决这种问题,它可以帮我们维护对象与对象之间的依赖关系,降低对象之间的耦合度。
DI:依赖注入,它是IoC的实现方式,就是说IoC是通过DI来实现的。由于IoC这个词汇比较抽象而DI却更直观,所以很多时候我们就用DI来代替它,在很多时候我们简单地将IoC和DI划等号,这是一种习惯。而实现依赖注入的关键是IoC容器,它的本质就是一个工厂。

依赖注入的方式:

  1. 构造器注入
    将被依赖对象通过构造函数的参数注入给依赖对象,并且在初始化对象的时候注入。
  • 优点: 对象初始化完成后便可获得可使用的对象。
  • 缺点:当需要注入的对象很多时,构造器参数列表将会很长;不够灵活。若有多种注入方式,每种方式只需注入指定几个依赖,那么就需要提供多个重载的构造函数,麻烦。
  1. setter方法注入
    IoC Service Provider通过调用成员变量提供的setter函数将被依赖对象注入给依赖类。
  • 优点: 灵活。可以选择性地注入需要的对象。
  • 缺点: 依赖对象初始化完成后由于尚未注入被依赖对象,因此还不能使用。
  1. 接口注入
    依赖类必须要实现指定的接口,然后实现该接口中的一个函数,该函数就是用于依赖注入。该函数的参 数就是要注入的对象。
  • 优点 接口注入中,接口的名字、函数的名字都不重要,只要保证函数的参数是要注入的对象类型即可。
  • 缺点: 侵入行太强,不建议使用。
    PS:什么是侵入行? 如果类A要使用别人提供的一个功能,若为了使用这功能,需要在自己的类中增加额外的代码,这就是侵入性。

4、IOC容器

Spring 的 IOC 容器就是 IOC 思想的一个落地的产品实现。IOC 容器中管理的组件也叫做bean。在创建bean 之前,首先需要创建 IOC 容器。Spring 提供了 IOC 容器的两种实现方式:

  1. BeanFactory:这是 IOC 容器的基本实现,是 Spring 内部使用的接口。面向 Spring 本身,不提供给开发人员使用。如果没有特殊指定,默认采用延迟初始化策略。只有当客户端对象需要访问容器中的某个受管对象的时候,才对该受管对象进行初始化以及依赖注入操作。所以,相对来说,容器启动初期速度较快,所需要的资源有限。对于资源有限,并且功能要求不是很严格的场景,BeanFactory是比较合适的IoC容器选择。
  2. ApplicationContext:BeanFactory 的子接口,提供了更多高级特性,比如事件发布、国际化信息支持等。面向 Spring 的使用者,几乎所有场合都使用ApplicationContext 而不是底层的 BeanFactory。ApplicationContext所管理的对象,在该类型容器启动之后,默认全部初始化并绑定完成。所以,相对于BeanFactory来说,ApplicationContext要求更多的系统资源,同时,因为在启动时就完成所有初始化,容器启动时间较之BeanFactory也会长一些。在那些系统资源充足,并且要求更多功能的场景中,ApplicationContext类型的容器是比较合适的选择。

ApplicationContext的主要实现类:

  • ClassPathXmlApplicationContext: 通过读取类路径下的 XML 格式的配置文件创建 IOC 容器对象
  • FileSystemXmlApplicationContext: 通过文件系统路径读取 XML 格式的配置文件创建 IOC 容器对象
  • ConfigurableApplicationContext: ApplicationContext 的子接口,包含一些扩展方法
    refresh() 和 close() ,让 ApplicationContext 具有启动、关闭和刷新上下文的能力。
  • WebApplicationContext: 专门为 Web 应用准备,基于 Web 环境创建 IOC 容器对象,并将对象引入存入 ServletContext 域中。

5、AOP

AOP(Aspect Oriented Programing)是面向切面编程思想,这种思想是对OOP的补充,它可以在OOP的基础上进一步提高编程的效率。简单来说,它可以统一解决一批组件的共性需求(如权限检查、记录日志、事务管理等)。在AOP思想下,我们可以将解决共性需求的代码独立出来,然后通过配置的方式,声明这些代码在什么地方、什么时机调用。当满足调用条件时,AOP会将该业务代码织入到我们指定的位置,从而统一解决了问题,又不需要修改这一批组件的代码。

标签:容器,依赖,入门,--,Spring,对象,IOC,注入
From: https://www.cnblogs.com/didadida-wang/p/16753967.html

相关文章

  • 111
    考试管理系统项目演示管理账号:admin/admin学员账号:person/person介绍一款多角色在线培训考试系统,系统集成了用户管理、角色管理、部门管理、题库管理、试题管理、......
  • k8s上部署zookeeper
    一、集群部署zookeeper1.1、指定节点部署给以下节点打上标签:k8s-node01、k8s-node02、k8s-master03【也就是我们的三个节点的集群部署在这三个节点上】[root@k8s-mast......
  • 鼠标操作
    使用鼠标模拟操作需要倒入fromselenium.webdriver.common.action_chainsimportActionChains将鼠标悬停到某个元素ele=driver.find_element(By.ID,"s-usersetting-......
  • Portfolio Management 5
    ☆R49:PortfolioRiskandReturn:PartⅠ-4Ⅳ、EfficientFrontierandInvestor'sOptimalPortfolio:有效前沿和投资者的最优组合1、InvestmentOpportunitySet......
  • k8s上部署Kafka
    一、集群部署Kafka1.1、指定节点部署给以下节点打上标签:k8s-node01、k8s-node02、k8s-master03【也就是我们的三个节点的集群部署在这三个节点上】[root@k8s-master01......
  • SYACALL_DEFINE系统调用
    Linux的系统调用在内核中的入口函数都是sys_xxx,但是我们在内核源码去搜索时,无法找到sys_xxx的函数定义,这是因为Linux的系统调用对应的函数全部都是由SYSCALL_DEFINE......
  • 如何在 UE4 中制作一扇自动开启的大门
    前言相信很多玩过游戏的朋友都知道,在玩游戏的过程中,如果我们被一道门给挡住了去路,只要按下某一个按键,门就会自动的开启。于是,今天我就带大家来制作一道会自动开启的大门吧!场......
  • 二叉树的直径和最大距离问题
    二叉树的直径和最大距离问题作者:Grey原文地址:博客园:二叉树的直径和最大距离问题CSDN:二叉树的直径和最大距离问题二叉树的直径给定一棵二叉树,你需要计算它的直径长度......
  • 只懂黑盒测试也能学会的代码覆盖率及精准化测试
    测试覆盖率是对测试完成程度的度量。它通常依据某种覆盖准则来对测试用例执行情况进行衡量,以判断测试执行得是否充分。——出自《计算机科学技术名词》第三版今天文章中......
  • selenium 函数汇总
    目录截图滚动条相关操作判断状态获取网页相关数据浏览器操作元素操作截图截某个元素的图ele=driver.find_element(By.XPATH,"//div[@class='alertalert-successale......