Spring,SpringMVC,SpringBoot

本文深入讲解Spring框架的核心概念,包括其特点、IOC/DI原理、AOP编程思想及其实现机制。同时介绍了Spring如何通过注解简化配置,并概述了SpringMVC和SpringBoot的工作原理与优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Spring

1. 什么是Spring

Spring是一个开源框架,使模块之间低内聚高耦合。核心是IOC(控制反转)和AOP(面向切面编程)。

2.Spring的特点

  • 低内聚高耦合
  • 支持AOP编程:方便实现对程序进行权限拦截、运行监控等功能
  • 支持声明式事务:只需要配置就可以完成对事务的管理,无需手动编程
  • 方便程序测试:Spring支持Junit4,可以通过注解测试Spring程序
  • 方便集成各种框架:如Structs、Hibernate、Mybatis等
  • 降低JavaEE API的使用难度

3.IOC/DI

3.1 IOC

IOC将设计好的对象交给容器控制,而不是传统的在对象内部直接控制。要想更好理解IOC需要明确“谁控制谁,控制什么,为何反转,哪些方面反转了”。

  • 谁控制谁,控制什么:传统Java SE程序设计,通过new创建对象,是程序主动去创建依赖的对象;而IOC专门有一个容器来控制对象的创建,所以说IOC容器控制对象,主要控制外部资源获取
  • 为何反转,哪些方面反转了:传统程序是由我们在对象中主动控制去直接获取依赖对象,是正转;而反转是由容器帮忙创建及注入依赖对象。因为容器帮我们查找及注入依赖对象对象只能被动接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转

3.2 DI

DI即依赖注入,由容器动态的将某个依赖注入到组件中。理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”。

谁依赖谁:应用程序依赖IOC容器

为什么需要依赖:应用程序需要IOC容器来提供对象需要的外部资源;

谁注入谁:IOC容器注入应用程序某个对象(即应用程序依赖的对象)

注入了什么:注入某个对象所需要的外部资源

3.3 IOC和DI的关系

它们是统一概念的不同角度描述,“依赖注入”准确描述了“被注入对象依赖IOC容器配置依赖对象”。

4.AOP

AOP是Spring框架面向切面的编程思想,AOP采用一种称为“横切”的技术,将设计多个业务流程的通用功能抽取并单独封装,形成独立的切面,在合适的时机将这些切面横向切入到业务流程指定的位置。

与OOP的区别:

OOP定义的是纵向关系。

AOP定义的是横向关系,AOP实现了无关代码块的重用,例如:用户登录模块。

4.1 AOP实现原理

  • AOP底层将采用代理机制进行实现
  • 接口+实现类:Spring采用jdk的动态代理Proxy
  • 实现类:Spring采用cglib字节码增强

4.2 AOP核心概念

  • target:目标类,需要被代理的类。例如:UserService
  • Jointpoint:连接点,指可能被拦截到方法
  • PointCut:切入点。例如:addUser()
  • advice:通知/增强。增强代码,例如after,before
  • Weaving:织入,把增强advice应用到目标对象target来创建新的代理对象Proxy的过程
  • Proxy:代理类
  • Aspect:切面,是切入点和通知advice的结合

5.Spring注解

5.1 为什么引入注解

传统的Spring使用xml文件对bean进行注入或者是配置AOP、事务,这么做有两个缺点。

(1)如果所有的内容都配置在xml文件中,那么xml文件会十分庞大,如果按需求将xml文件分开,那么xml文件又很多。导致配置文件的可读性与可维护性变得很低

(2)在开发中.java文件和.xml文件不断切换,十分麻烦,降低开发效率

所以,Spring引入注解,通过“@XXX”的方式,让注解与JavaBean紧密结合,大大减少配置文件的体积,增加了Java Bean的可读性与内聚性。

5.2 常用注解

1.@Autowired,自动装配,消除Java代码的getter/settter与bean属性中的property。默认按类型匹配的方式,在容器查找匹配的bean,当有且仅有一个匹配的Bean时,Spring将其注入到@Autowired标注的变量中。

2.@Qualifier,如果容器有一个以上匹配的bean,则可以通过@Qualifier注解限定Bean的名称

3.@Resource与@Autowired类似,

  • @Resource后面没有任何内容,默认通过name属性匹配bean,找不到再按type去匹配
  • 指定了name或type则根据指定的name或type去匹配
  • 指定了name和type则根据指定的name和type去匹配,任何一个不匹配都会报错

区分@Resource与@Autowired

(1)@Resource默认按照byName方式进行bean匹配,@Autowired后面没有任何内容默认按照byType匹配

(2)@Resource是J2EE注解,@Autowired是Spring注解

4.@service用于标注业务层组件

5.@Controller用于标注控制层组件

6.@Repository用于比澳洲数据访问层组件,即DAO层

二、SpringMVC

1.什么是SpringMVC

SpringMVC是一种应用于Web开发的MVC框架。

2.SpringMVC工作原理

(源自https://www.cnblogs.com/xiaoxi/p/6164383.html

(1)用户发送请求到前端控制器

(2)前端控制器收到请求调用HandlerMapping处理器映射器

(3)处理器映射器找到具体的处理器(根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给前端控制器

(4)前端控制器调用HandlerAdapter处理器适配器

(5)HandlerAdapter经过适配器调用具体的处理器(Controller,也叫后端控制器)

(6)Controller执行完后返回ModleAndView

(7)HandlerAdapter将controller执行结果ModelandView传给前端控制器

(8)前端控制器将ModelandView传给视图解析器

(9)视图解析器将解析结果View返回到前端控制器

(10)前端控制器根据View进行渲染视图

(11)前端控制器响应用户

三、SpringBoot

1.什么是SpringBoot

SpringBoot简化新Spring应用的初始搭建以及开发过程,整合了很多框架。可以快速启动一个Spring程序

2.SpringBoot优点

  • 快速构建项目
  • 对主流开发框架不需要配置集成
  • 项目可以独立运行,不需要依赖servlet容器
  • 提供运行时的应用监控
  • 极大提高了开发和部署效率
  • 与云计算天然集成

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值