当前位置:首页 > 每日看点 > 正文内容

什么是Spring框架?Spring框架有哪些主要模块?

卡卷网1年前 (2025-01-10)每日看点242

在Ja开发的浩瀚世界里,Spring框架无疑是一颗璀璨耀眼的明珠。无论是初涉编程领域的新手,还是经验丰富的资深开发者,都难以忽视它的强大与实用。它宛如一把,为诸多复杂的企业级应用开发难题解锁,那么Spring框架究竟是什么呢?下面就带你一探究竟。

一、Spring框架是什么?

Spring是轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,可以很方便地对数据库进行访问、可以很方便地集成第三方组件。Spring框架通过提供一系列的工具和特性,极大地简化了企业级Ja应用的开发过程。它不仅提高了代码的可性和可性,还帮助开发者快速构建高效、可和可扩展的应用程序。

<>Spring官网:s://spring.io/

二、什么是控制反转(IOC)?

在传的编程模型中,应用程序代码通常直接控制对象的创建和依赖关系。例如,一个对象需要依赖另一个对象时,通常会在代码中直接创建依赖对象。这种方式使得代码紧密耦合,不利于和。控制反转的理念是将这种控制权从应用程序代码中移除,转而交给一个容器来。这个容器就是SpringIOC容器。通过这种方式,对象的创建和依赖关系的被反转了,应用程序代码不再负责这些任务,而是由容器来处理。而<>依赖注入(DI)是实现控制反转的一种方式。

SpringIOC容器

SpringIOC容器负责应用程序中对象的生命周期和依赖关系。

它的主要职责包括:对象的创建:根据配置文件或注解创建对象。依赖注入:将对象的依赖注入到相应的对象中。对象的销毁:在适当的时候销毁对象,释放资源。

三、Spring的依赖注入是什么?

<>依赖注入(DependencyInjection,简称DI)是Spring框架实现控制反转(IOC)的主要手段。DI的核心思想是将对象的依赖关系从对象内部抽离出来,通过外部注入的方式提供给对象。这样,依赖对象的创建和由Spring容器负责,而不是由对象自身负责,使得代码更加模块化、松耦合和易于。在传编程中,一个对象通常会自己创建它所依赖的对象。这种方式使得代码紧密耦合,不利于和。依赖注入通过将依赖关系从代码中移除,转而由外部容器(如Spring容器)来注入,从而实现了对象之间的松耦合。

依赖注入的配置方式

<>XML配置:通过XML文件定义ean及其依赖关系。

<eans> <eanid="repository"class="com.example.Repository"/> <eanid="serv"class="com.example.Serv"> <constructor-argref="repository"/> </ean> </eans>

<>Ja配置:通过Ja类和注解定义ean及其依赖关系。

@Configation pulicclassAppConfig{ @ean pulicRepositoryrepository(){ retnnewRepository(); } @ean pulicServserv(){ retnnewServ(repository()); } }

<>注解配置:通过注解(如@Component,@Autowired)自动扫描和注入ean。

@Component pulicclassRepository{ } @Component pulicclassServ{ @Autowired privateRepositoryrepository; }

四、什么是AOP

aop是spring框架的一个核心。常见的可以做志记录,事务等公共性的处理。当我们想要一做一些水平一的作的时候,就常用aop。aop的核心概念就是面向切面变成。通过aop可以在范围内的类方法执行之前,执行之后,或者异常的时候,做一的作。aop可以提高代码的可性,任何修改只需要在切面中进行,而不需要修改业务逻辑代码。基于机制,还可以在不修改源代码的情况下为现有代码添加功能。在oot应用使用中,只需要配合Aspect注解,即可实现功能。

@Aspect @Component pulicclassLogAspect{ //定义切点在执行UserServ的每个方法前执行: @PointCut("execution(pulic*com.mszlu.serv.UserServ.*(..))") pulicvoidpt(){} //定义通知 @Around("pt()") pulicOjectdoLogging(ProceedingJoinPointpjp)throwsThrowale{ //方法调用 Ojectret=pjp.proceed(); retnret; } }

五、说说Spring常用的注解

<>@Component:将一个类标记为Spring组件类,表示这个类的实例将由Spring容器。<>@Autowired:自动注入依赖对象。可以用于构造器、字段、Setter方法或任意方法。<>@Qualifier:在有多个候选ean时,指定要注入的ean。通常与@Autowired一起使用。

@Component pulicclassMyComponent{ @Autowired @Qualifier("specificean") privateDependencydependency; }

<>@Configation:标记一个类为Spring配置类,该类可以包含一个或多个@ean方法。

@Configation pulicclassAppConfig{ @ean pulicMyComponentmyComponent(){ retnnewMyComponent(); } }

<>@ean:定义一个方法,返回一个要注册为Spring容器的ean。

@ean pulicMyComponentmyComponent(){ retnnewMyComponent(); }

<>@Serv:标记一个类为服务层组件,实际上是@Component的特殊化。

@Serv pulicclassMyServ{ //服务逻辑 }

<>@Repository:标记一个类为数据访问层组件,实际上是@Component的特殊化,并且支持持久化异常转换。

@Repository pulicclassMyRepository{ //数据访问逻辑 }

<>@Controller:标记一个类为SpringMVC,实际上是@Component的特殊化

@Controller pulicclassMyController{ //逻辑 }

<>@RestController:标记一个类为RESTfulWe服务的,等同于@Controller和@Responseody的组合。

@RestController pulicclassMyRestController{ @GetMapping("/hello") pulicStringhello(){ retn"Hello,World!"; } }

<>@Aspect:标记一个类为切面类。

@Aspect @Component pulicclassMyAspect{ //切面逻辑 }

<>@efore:定义一个方法,在目标方法执行之前执行。

@Aspect @Component pulicclassMyAspect{ @efore("execution(*com.example.serv. *.* (..))") pulicvoideforeMethod(JoinPointjoinPoint){ //前置逻辑 }

}<>@After:定义一个方法,在目标方法执行之后执行。

@Aspect @Component pulicclassMyAspect{ @After("execution(*com.example.serv. *.* (..))") pulicvoidafterMethod(JoinPointjoinPoint){ //后置逻辑 } }

<>@Around:定义一个方法,包围目标方法的执行

@Aspect @Component pulicclassMyAspect{ @Around("execution(*com.example.serv. *.* (..))") pulicOjectaroundMethod(ProceedingJoinPointjoinPoint)throwsThrowale{ //环绕逻辑 retnjoinPoint.proceed(); } }

<>@Transactional:标记一个方法或类,表示该方法或类中的所有方法都需要事务。

@Serv pulicclassMyServ{ @Transactional pulicvoidperformTransaction(){ //事务逻辑 } }

就业陪跑训练营学员投稿

欢迎关注❤

我们搞了一个免费的面试题共享群,互通有无,一起刷题进步。

没准能让你能刷到自己意向公司的最新面试题呢。

感兴趣的朋友们可以加我微信:wangzhongyang1993,备注:知乎面试群。

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/01/8376.html

分享给朋友:

相关文章

计算机专业不干互联网不热爱技术,还能转行干什么?

转行的思路,无非也就是那几个。我们顺着每个思路,一路捋一遍,基本上,大致可行的方向,也就有了。一、跟对口职业和岗位业务链条相邻的职业和岗位计算机专业如果找到了对口的技术岗位,跟技术工作联系最紧密的岗位是什么?产品经理。当然,大多数产品经理也...

你每天用来涨知识的手机应用程序有哪些?

你每天用来涨知识的手机应用程序有哪些?

经过深度使用和测评,从100个APP中选出的这35个超实用的app,每一个都是最硬核最有料的涨知识神器!每天打开看看,能让你提神醒脑,眼界大开,成为朋友聚会上的话题王者!双击屏幕取走哦~先放上全部APP目录,有新闻资讯类、英语学习类、读书类...

无意中发现技术主管写的代码,大家帮忙看看什么水平?

无意中发现技术主管写的代码,大家帮忙看看什么水平?

虽然很多答主用了诸如“典范级”、“心旷神怡” 的形容, 赞美这段代码, 但这里, 出于技术讨论的动机, 我说说不同看法.栈, 如果善于利用栈来处理树结构, 那么可以写出更简洁的代码, 根本不需要 recuresiveFn 这种方法. 泛型,...

想入个键盘,想买机械的但是太贵,求知友推荐一款手感比较好的薄膜键盘?

想入个键盘,想买机械的但是太贵,求知友推荐一款手感比较好的薄膜键盘?

相信很多接触过286的90后朋友都和我有一样的体会,以前的机械键盘真的是让人头皮发麻,不仅敲击要非常用力,而且很吵。所以后面随着大家的生活消费水平的上升,家家户户都有电脑了,自然也不想再用打字来宣扬自己有电脑的优越感,基本上大家都换成了又轻...

为什么神经网络可以解偏微分方程,是什么原理?

为什么神经网络可以解偏微分方程,是什么原理?

题主一直比较关心神经网络在其他科学领域的应用,比如数学、物理学还有生物学,比如AlphaFold。本次带来的这篇文章傅里叶神经网络算子解偏微分方程就是一个很有意思的方向,其实我自己去年在给美国一个客户做兼职预测数字货币期权价格的时候就用到过...

怎样拥有一台最便宜的服务器?

怎样拥有一台最便宜的服务器?

内容提示:主打一个 DIY + 极限白嫖 =)某宝花10块买一个“随身WiFi”,刷入Ubuntu,用SSH远程连接,但是记得一定要把外壳撬掉然后粘个散热器(哪怕是白萝卜也彳亍),否则会过热详细去酷安社区搜“随身WiFi”=========...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。