套用百度百科的:Spring框架

Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。

◆目的:解决企业应用开发的复杂性

◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

◆范围:任何Java应用

Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。

Spring是一个十分庞大的体系,例如:

SpringFramework

SpringData

SpringSecurity

SpringBoot

SpringCloud

当然,除了这些之外,Spring还包括很多其他的项目。

其中介绍一下SpringFramework这个项目,它是一个开源的Java/JavaEE全栈的应用程序,SpringFramework提供了一个简易的开发方式,这种开发方式可以避免使用那些可能会导致底层源代码变得繁杂混乱的大量的属性文件和帮助类。

在SpringFramework架构体系包括以下部分:

然后,在Spring的核心概念中:

1.Bean管理

2.依赖注入(DI),控制反转(IOC)

3.面向切面编程(AOP)

那么我们来细致说一下这几个概念:

1.Bean管理:

在Spring中,是将对象的创建交给Spring容器来管理的,也就是说只有将类放入Spring容器中,Spring才会对其进行一系列操作。且在实际开发中,我们通常使用配置文件来声明Bean对象。

但是再Spring是如何具体获取的类得对象?在Spring容器,有一个BeanFactory(Bean工厂)对象,是Spring容器的根接口,ApplicationContext是它的子接口,通常用它的子接口ApplicationContext来进行对Spring容器的访问。

其中BeanFactory和ApplicationContext的主要区别就是一个为即使加载和延迟加载(懒加载),具体如何表现我这里就不特地说明了,不清楚大家可也了解一下。

在ApplicationContext子接口常用的四个实现类:

1.ClassPathXmlApplicationContext从classpath加载出Spring的配置文件。

2.FileSystemApplicationContext从系统文件中加载Spring的配置文件。

3.AnnotationConfigApplicationContext获取基于注解的Spring容器对象。

4.XmlWebApplicationContext在web环境中获取Spring容器对象。

Spring通过BeanFactory来获取这些类的对象,在配置文件中通过<bean/>节点来讲类交给Spring容器进行关联(这点,我上面也说明了通常使用配置文件进行配置,但是也可以使用注解进行配置声明),ApplicationContext的实现类通过使用其getBean()方法来从Spring容器中获取对象,默认是为单例的(也就是说不是拿一次对象就创建一次对象);

2.依赖注入和控制反转

在市面上的介绍中,依赖注入和控制反转到底是不是同一个概念呢?其实可以将其两者认为是两种角度评判同一件的,形成的两种描述:依赖注入就是同应用程序角度来叙述,应用程序在依赖容器创建的时候并且注入它所需要的外部资源,例如参数之类的;而控制反转就是从Spring容器角度来叙述:通过Spring容器来控制应用程序,由容器反向的向应用程序中注入应用程序所需的外部资源进行系列操作。

目的就是降低程序的耦合性。具体可以这样理解:假设一个电脑对象,键盘对象和鼠标对象,那么如果要使用到电脑对象的打字方法,就需要引用到键盘对象和鼠标对象,那么这个现象就可以称电脑对象依赖到键盘和鼠标对象,并创建,这是一种依赖关系,就是一种耦合性,而且这种现象会影响到整个应用程序的生命周期,并且会带来相对较高的耦合度,不易于开发维护且违背了开发规范(如果电脑鼠标坏了,那么电脑也不能工作了,还得重新连接新鼠标),那么需要通过一个中间件来降低这种耦合性(不可以断开)。

因此就引发出一种著名的设计原则:依赖注入,控制反转。它的核心原理就是将具体实体类之间的依赖关系,尽可能的转换为一种抽象的依赖关系(将电脑依赖鼠标转换为电脑依赖外设,依赖一种抽象,非实体的对象),那这个时候就与Java的特性相呼应了,抽象和接口就是这样功能,至于他两的区别,其他博文有细说。

小结:对于IOC和DI对于开发的最大优势,不是从开发编码上,而是从编程思想上,产生了一种将控制权转换为被动权。原本程序是想要什么类,依赖什么类自己直接获取就是了,现在IOC/DI思想中,一切变为被动,被动的等待IOC/DI容器来创建并注入它所需要的资源。有效的分离了对象和它所需要的外部资源,降低了结构的耦合度,增加了功能的复用性,使得整个程序的体系机构灵活,利于后期维护。

3.面向切面编程(AOP,全称为Aspect Oriented Programming)

先说下什么是面向切面编程:定义一个切面,从二维方向的纵向定义处理方法,处理完成之后,回到横向进行处理业务逻辑。

AOP是在Spring框架中被作为核心组成部分之一,解耦式开发,将程序进行模块化。在Spring中,AOP的确发挥强大的思想,最好体现的就是事务控制,通过Spring,进行对全局代码块的事务控制,这也是Spring的一大亮点。

对于面向对象大家都熟悉,OOP是从静态角度考虑程序结构,但是AOP是从动态角度考虑程序运行过程。对于两者,可以认为AOP是OOP的完善和补充。在OOP中造成了大量重复代码块,而AOP是一种横切技术。

谈对Spring框架的大策大悟相关推荐

  1. 【JAVAEE框架】浅谈 Spring 框架的两大核心思想 AOP 与 IOP

    哈喽~大家好呀,这篇来看看Spring 框架的两大核心思想.

  2. 浅谈Spring框架应用的设计模式(一)——工厂模式

    文章目录 前言 一.工厂模式介绍 1.简单工厂模式 (1)静态工厂模式 (2)利用反射机制实现的简单工厂 2.工厂方法模式 3.抽象工厂模式 二.Spring框架中工厂模式的重要应用 1.BeanFa ...

  3. 阿里三面让我现场改造Spring框架,明天带他去爬山!

    作为一个Java程序员,提到开源框架,Spring无疑是绕不过去的门槛,相信大家对它都不陌生,或多或少都用过. 但是如果谈到改造Spring框架,实现它的自定义扩展,以及大厂面试必问的源码,很多人就会 ...

  4. 深入浅出,Spring 框架和 Spring Boot 的故事

    Spring 框架可以说是 Java 开发人员使用的最流行的应用程序开发框架之一.它目前由大量提供一系列服务的模块组成.包括模块容器,为构建横切关注点提供支持的面向切面编程(AOP),安全框架,数据存 ...

  5. 25道Spring框架面试题

    25个经典的Spring面试问答 By - Last updated: 星期二, 五月 5, 2015 本人收集了一些在大家在面试时被经常问及的关于Spring的主要问题,这些问题有可能在你下次面试时 ...

  6. 浅谈javaweb三大框架和MVC设计模式

    浅谈javaweb三大框架和MVC设计模式 转载自:http://blog.csdn.net/sunpeng19960715/article/details/50890705 小序:博主以前在学jav ...

  7. 使用Spring框架实现数据库事务处理

    企业级应用系统在更新数据库数据时,一般都采用数据库事务处理,以确保数据库数据的一致性.本文主要讨论在Spring框架中如何使用数据库事务处理更新数据库数据.通过本课的学习,可以达到如下目标. ● 了解 ...

  8. 多图详解Spring框架的设计理念与设计模式

    Spring作为现在最优秀的框架之一,已被广泛的使用,51CTO也曾经针对Spring框架中的JDBC应用做过报道.本文将从另外一个视角试图剖析出Spring框架的作者设计Spring框架的骨骼架构的 ...

  9. 2022年Java应届生面试之Spring框架基础知识

    前言:工作的原因,最近没有及时更新相关系列.很抱歉!在复习Spring框架的同时也别忘了j2ee的相关知识理论wo~ 大家好!我是JAVA 中的Spring框架,我是一个开源的容器性质的轻量级框架. ...

最新文章

  1. Windows 7 64位机上OpenCV2.4.3的编译、安装与配置
  2. PyQt:成功解决Exception quot;unhandled TypeErrorquot; expected str, bytes or os.PathLike object, no
  3. map遍历删除异常:ConcurrentModificationException
  4. android 判断byte值_Android开发之UDP可靠性传输
  5. LAMP架构,纯文本作品
  6. zenmap nmap输出无显示_双路显示控制仪XME-H80-1616价格报价
  7. 可以在一个函数中定义另一个函数_第5周 定义一个函数
  8. admysqlslap压力测试
  9. String 也能做性能优化,我只能说牛逼!
  10. 关于JAVA输入输出流造成的Runtime线程阻塞问题【新人笔记】
  11. 台式计算机网络共享,教大家怎么把电脑网络共享给手机上网
  12. NVT平台model sensor配置
  13. 报错:Unhandled exception
  14. Bmob后端云的基本使用
  15. html 剩余时间 自动减,HTML+CSS+JS实现今天的日期和今天剩余的时间
  16. android 蓝牙低功耗(BLE)非常棒的工具类,获取小米手环的步数
  17. java web 下拉列表_关于web中下拉列表的几种实现方法
  18. 从简单的信道估计说起
  19. QTP工具介绍(一)()
  20. selenium常用的浏览器窗口操作

热门文章

  1. 大学生集体户口面临孩子落户困境
  2. 直播频频翻车:追风口的人,变成风口杀手
  3. 1104. Path In Zigzag Labelled Binary Tree**
  4. 【Python】绘制股票K线图(烛状图)并增加成交量和移动平均线(详细简单)
  5. 二. 滤波器件选型学习笔记
  6. 分支定界算法理解(摘抄)
  7. 那一天,我闭目在经殿的香雾中
  8. 老李的RT-THREAD学习01--点灯
  9. 会议及作用篇--项目管理(三)
  10. 大破才能大立?数字化转型助你说不!影子、柔性组织的决策与效率提升