幼儿饰品瑜伽美体用品微软
投稿投诉
微软创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品

快速切入Spring框架核心概念总览

  编者按:
  这篇内容将帮助你总体认识有关Spring框架相关的核心知识。我尽量在这里涵盖Spring框架的一些非常重要的概念。希望这可帮助你更好的总体把握Spring框架,促使你积极探索Spring的有趣的技术栈生态世界。
  Spring框架
  1、Spring是什么?
  简而言之,Spring是企业级Java的开源开发框架。Spring框架的核心功能可用于开发任何java应用程序。Spring框架的核心模块如下:SpringContext(Spring上下文):用于依赖注入(DI);SpringDAO(数据库访问对象):使用DAP模式进行数据库操作;SpringJDBC:用于JDBC和数据源的支持;SpringORM:用于ORM工具支持,如Hibernate;SpringAOP:用于面向方面的编程;SpringWebmodule:用于创建Web应用。
  2、Spring框架的优点是什么轻量级:Spring时轻量级应用框架。Spring框架的基本版本在2MB左右;依赖注入控制反转(DIIoC):这有助于通过连接独立的组件对象来实现松散耦合;Spring容器:包含和管理应用程序对象的生命周期;事务管理:Spring支持事务管理,即JDBC操作、文件上传、异常处理等,通过spring注解或bean配置来完成;SpringMVC:SpringMVC可用于创建Web应用程序以及能够返回XML或JSON响应的restfulWeb服务;异常处理:Spring提供了一个方便的API来将特定的技术异常(由JDBC、Hibernate等抛出)转换为一致的未经检查的异常;面向切面编程(AOP):AOP将程序逻辑分解为不同的部分(称为关注点)。它用于通过横切关注点来增加模块化。横切关注点是可以影响整个应用程序的关注点,应尽可能集中在代码中的一个位置,例如事务管理、身份验证、日志记录、安全性等。
  3、什么是SpringBean?
  任何由SpringIoC容器初始化的普通Java类都称为SpringBean。我们使用spring应用程序上下文来获取SpringBean实例。SpringIoCContainer管理SpringBean范围作用域的生命周期并在bean中注入任何所需的依赖项。
  Springbean的不同作用域:
  当我们声明时,我们可以指定bean的作用域来通知IoC容器关于bean的创建以及它将存活多长时间。
  对于任何Java应用程序,都有两个不同的作用域,称为单例(Singleton)和原型(Prototype)
  主要有三种不同的作用域(或范围),即请求(request)、会话(session)和全局会话(globalsession),专门针对基于Spring的JavaWeb应用程序。
  Singleton是任何bean的默认作用域。这意味着每个IoC容器将创建单个bean实例。因此,单例bean不是线程安全的。在原型范围内,每次请求bean时都会创建一个新实例。在请求范围内,单个bean被定义到一个HTTP请求内。此范围仅在支持Web的springApplicationContext中有效。在会话范围内,单个bean被定义到一个HTTP会话内。此范围仅在支持Web的springApplicationContext中有效。在globalsession范围内,bean被定义为全局HTTP会话内有效。此范围仅在支持Web的springApplicationContext中有效。
  要设置springbean的范围,我们可以在标签中使用scope属性。scope用于基于注释的DI。
  4、SpringIoC容器
  Spring容器是Spring框架的核心。容器将创建对象,把它们连接在一起,配置它们,并管理它们从创建到销毁的完整生命周期。Spring容器使用依赖注入(DI)来管理组成应用程序的组件。
  有两种不同类型的容器:
  BeanFactory容器:这是Spring容器的核心。org。springframework。beans。factory。BeanFactory是一个接口,充当IoC容器,它实例化、配置和管理许多bean。应用示例如下:Beans。xml:lt;?xmlversion1。0encodingUTF8?beansxmlnshttp:www。springframework。orgschemabeansxmlns:xsihttp:www。w3。org2001XMLSchemainstancexsi:schemaLocationhttp:www。springframework。orgschemabeanshttp:www。springframework。orgschemabeansspringbeans3。0。xsdbeanidhelloWorldclasscom。newday。bean。HelloWorldpropertynamemessagevalueHelloWorld!beanbeanspackagecom。newday。bean;publicclassHelloWorld{privateStringmessage;publicStringgetMessage(){returnmessage;}publicvoidsetMessage(Stringmessage){this。messagemessage;}}MainApp。java:importorg。springframework。beans。factory。BeanFactory;importorg。springframework。beans。factory。xml。XmlBeanFactory;importorg。springframework。core。io。ClassPathResource;importorg。springframework。core。io。Resource;importcom。newday。bean。HelloWorld;publicclassMainApp{publicstaticvoidmain(Stringargs〔〕){ResourceresourcenewClassPathResource(beans。xml);BeanFactorybeanFactorynewXmlBeanFactory(resource);HelloWorldhelloWorld(HelloWorld)beanFactory。getBean(helloWorld);System。out。println(helloWorld。getMessage());}}
  ApplicationContext容器:org。springframework。context。ApplicationContext接口也充当IoC容器,但ApplicationContext接口建立在BeanFactory接口之上,以提供一些BeanFactory额外的功能,例如与Spring的AOP的简单集成、消息资源处理(对于I18N)、事件传播、Web应用程序的应用层特定上下文(例如WebApplicationContext)。所以使用ApplicationContext比使用BeanFactory更好些。示例代码如下:lt;?xmlversion1。0encodingUTF8?beansxmlnshttp:www。springframework。orgschemabeansxmlns:xsihttp:www。w3。org2001XMLSchemainstancexsi:schemaLocationhttp:www。springframework。orgschemabeanshttp:www。springframework。orgschemabeansspringbeans3。0。xsdbeanidhelloWorldclasscom。newday。bean。HelloWorldpropertynamemessagevalueHelloWorld!beanbeanspackagecom。newday。bean;publicclassHelloWorld{privateStringmessage;publicStringgetMessage(){returnmessage;}publicvoidsetMessage(Stringmessage){this。messagemessage;}}packagecom。newday。applicationcontext;importorg。springframework。context。ApplicationContext;importorg。springframework。context。support。ClassPathXmlApplicationContext;importcom。newday。bean。HelloWorld;publicclassMainApp{publicstaticvoidmain(Stringargs〔〕){ApplicationContextappContextnewClassPathXmlApplicationContext(beans。xml);HelloWorldhelloWorld(HelloWorld)appContext。getBean(helloWorld);System。out。println(helloWorld。getMessage());}}5、Autowired
  对于基于注解的依赖注入,使用Autowired注解。标有ComponentServiceRepository等的类可以注入到标有Autowired的属性中
  Autowired应用于:字段域:用于基于字段的依赖注入;setter:用于setter依赖注入。与基于字段的依赖注入相同;构造器:基于构造函数的依赖注入。
  1)基于构造器和setter的区别依赖项的注入可以是可选的,也可以是强制性的。对于强制注入,我们使用基于构造函数的DI。对于可选的依赖项,我们可以使用基于setter的DI。但是,我们可以使用Required注释标记基于setter的DI。在循环依赖的情况下,基于构造器的DI将无法注入,但基于setter的DI将能够注入如果要注入更多数量的参数,则建议使用基于构造函数的DI。
  2)context:annotationconfig和context:componentscan的区别context:annotationconfig用于激活已在应用程序上下文中注册的bean中的注释;context:componentscan也可以执行context:annotationconfig所做的工作,但也可以扫描包以在应用程序上下文中查找和注册bean。
  3)Component、Controller、RepositoryService注解的区别
  如果一个类用ComponentControllerServiceRepository注解标记,那么SpringDI容器可以在组件扫描机制期间识别该类。但是,对于服务层类使用Service是个好主意,并且Controller应该在springmvcweb控制器中使用。Repository用于将DAO导入DI容器。此外,任何未经检查的异常都将被转换为SpringDataAccessException。
  4)ViewResolver与MultipartResolver
  ViewResolver用于按名称解析视图。该接口由InternalResourceViewResolver实现;
  MultipartResolver用于处理web应用程序中的文件上传。
  5)SpringMVC中的验证
  org。springframework。validation。Validator接口支持springMVC验证。验证表单的一些实用方法是ValidationUtils类中的rejectIfEmptyOrWhitespace()和rejectIfEmpty()。示例如下:ComponentpublicclassEmployeeValidatorimplementsValidator{publicbooleansupports(Classclazz){returnEmployeeVO。class。isAssignableFrom(clazz);}publicvoidvalidate(Objecttarget,Errorserrors){ValidationUtils。rejectIfEmptyOrWhitespace(errors,firstName,error。firstName,Firstnameisrequired。);ValidationUtils。rejectIfEmptyOrWhitespace(errors,lastName,error。lastName,Lastnameisrequired。);ValidationUtils。rejectIfEmptyOrWhitespace(errors,email,error。email,Emailisrequired。);}}
  SpringMVC中验证表单的另一种方法是:对模型bean的属性使用Hibernate验证(例如NotNull、Size等)在控制器的方法签名中使用Valid、BindingResult。BindingResult。hasErrors()方法来验证模型bean。6、SpringMVC拦截器
  HandlerInterceptor接口充当springMVC拦截器。它在服务请求之前和之后拦截。如果您实现了HandlerInterceptor接口,则preHandle()、postHandle()和afterCompletion()是要覆盖的方法。但是,为了避免覆盖,您可以使用HandlerInterceptorAdapter类。7、SpringMVC框架中的异常处理
  Spring中的异常是使用SimpleMappingExceptionResolver类以声明方式处理的。您要处理的异常列表是针对exceptionMapping属性配置的。如果有异常发生在流程中的任何地方,都将被捕获并显示相应的视图。对于所有其他异常,您可以针对defaultErrorView属性捕获它们。示例配置如下:beanclassorg。springframework。web。servlet。handler。SimpleMappingExceptionResolverpropertynameexceptionMappingspropspropkeycom。newday。exception。XYZExceptionerrorxyzExceptionViewproppropspropertypropertynamedefaultErrorViewvalueerrorgenericExceptionViewbean
  8、如何在SpringBean中获取ServletContext和ServletConfig对象?
  实现ServletContextAware和ServletConfigAware接口并覆盖以下方法:ControllerRequestMapping(valuemagic)publicclassSimpleControllerimplementsServletContextAware,ServletConfigAware{privateServletContextcontext;privateServletConfigconfig;OverridepublicvoidsetServletConfig(finalServletConfigservletConfig){this。configservletConfig;}OverridepublicvoidsetServletContext(finalServletContextservletContext){this。contextservletContext;}othercode}9、Spring中的事务管理
  数据库事务是一组被视为关联工作单元的操作。事务的主要原则是提交所有操作或在失败的情况下回滚所有操作。在交易中提交数据时,我们需要确保交易协议称为ACID(原子性一致性隔离持久性)的属性:原子性(Atomicty):事务中的所有操作都被视为一个工作单元。因此,事务将被提交或回滚。一致性(Consistency):这通过维护数据库的引用完整性来确保事务将数据库从一个有效状态带到另一个有效状态。隔离性(Isolation):每个事务都应该与其他事务隔离,即使它们处理的是同一组数据。持久性(Durability):这确保一旦事务完成,数据将永久存在于数据库中。即使断电或系统崩溃,数据也不会丢失。
  Spring支持编程式和声明式两种事务管理。它还支持全局和本地事务。
  全局事务vs本地事务:本地事务处理集中式系统中的单个数据源(例如JDBC);全局事务处理分布式系统中的多个数据源(例如JDBC、JMS)。一个全局事务是多个本地事务的集合;
  编程式事务与声明式事务:
  Spring支持两种不同类型的事务管理,称为编程式(Programatic)和声明式(Declarative)事务管理:编程式事务:这意味着,您需要在代码中管理事务。很难维护;声明式事务:这意味着要将事务管理代码与业务逻辑分开。因此需要使用XML或基于注释的配置来管理事务。SpringAOP模块支持声明式事务管理。
  脏读、幻读和不可重复读:脏读:当一个事务正在更改记录元组并且第二个事务在原始更改被提交或回滚之前尝试读取此元组记录时,就会发生脏读。这被称为脏读场景,因为第一个事务总是有可能回滚更改,导致第二个事务读取无效值。幻读:幻读发生在同一查询在事务中执行两次,并且第二个结果集包含在第一个结果集中不可见的行。这种情况是由另一个事务在两个查询的执行之间插入新行引起的不可重复读:当在同一个事务中相同的查询产生不同的结果时,就会发生不可重复读取。这因为当另一个事务更新其他事务返回的数据时,就会发生这种情况。
  隔离与传播:隔离度(Isolation):此事务与其他事务的工作隔离的程度。例如,这个事务可以看到来自其他事务的未提交的写入吗?传播(Propagation):在传播的情况下,代码将始终在事务范围内运行。创建一个新事务或重用一个(如果可用)。10、HibernateDAOSupport和HibernateTemplate
  在旧版本的spring和hibernate集成中,需要HibernateDAOSupport和HibernateTemplate。但是,较新版本的Spring不建议使用这两个类(这里仅做了解)。
  通常我们从HibernateDAOSupport扩展我们的DAO类,并且getHibernateTemplate()方法将可用于Hibernate会话中的CRUD操作。由于这不是推荐的方法,所以我们在DAO中注入会话工厂(SessionFactory)。下面的代码片段会给你一些关于HibernateDAOSupport和HibernateTemplate的想法:publicclassEmployeeHibernateDaoextendsHibernateDaoSupportimplementsEmployeeDao{Transactional(readOnlyfalse)publicvoidsaveEmployee(Employeeemp){System。out。println(Createnewemployeeemp);getHibernateTemplate()。save(emp);System。out。println(Employeecreatedemp);}}11、SpringDAO和SpringORM的区别
  DAO是一种设计模式,以最大限度地减少应用程序和后端之间的耦合;
  ORM处理如何将对象映射到对象关系数据库中,从而减少数据库和应用程序之间的耦合。
  如果您在没有DAO的情况下使用ORM,那么您的应用程序将变得依赖于ORM,因此很难从一个ORM(例如Hibernate)移动到另一个ORM(例如NoSQL)。
  SpringDAO是使用Repository注解实现的。Spring存储库扩展JPARepository并传递JPA实体及其主键。RepositorypublicinterfacePersonRepositoryextendsJPARepositoryPerson,PersonPK{publicListfindByFirstName(StringfirstName);Query(YourSQLquery)publicListfindByAddress(StringfirstName);}
  最后,关于Spring框架相关的概念就简要介绍到这里,希望这能给你进入并深入Spring技术栈一个简单入口,而不会被Spring技术生态所惊吓(Spring现在都成软件开发技术的全家桶了,啥都有)日进一步,锲而不舍,终将大成!

图紫吊兰的养殖方法和注意事项温度是否适宜十分关键紫吊兰又被叫做彩叶吊兰,它们的叶片柔软而又漂亮。枝条既刚且柔,形似展翅跳跃的仙鹤,故古有折鹤兰之称。总之,用紫吊兰装饰环境可起到别致的点缀效果。紫吊兰现在深受人们的喜爱。……1999元,海信阅读手机A9黛青色版本开售作为手机品牌,海信手机一直致力于阅读手机品类的研发。此前,海信手机已经推出了彩墨屏阅读手机A5CA5Pro、海信5G阅读手机A7彩墨屏CC版等多款产品。今年5月,海信推出了海信……图紫色满天星花还有这样神奇的花语满天星,属于石竹科,由于花型小、浅色、花姿蓬松且具立体感,气质淡雅、清秀,给人以朦胧感,是当今流行的鲜花之一,且多做陪衬作用。紫色满天星是其中的一种。鲜花是生活中最常见的……图波斯猫饮食的注意事项给喵星人喂食要牢记三点波斯猫有一身飘逸华丽的毛发和漂亮的脸蛋,因此它们深受人们的喜爱,还有猫中王子的美称。这种猫咪性格甜美、温和,它们能很快融入新环境之中,让家庭和谐温暖。波斯猫的美貌是有目共……图种荷花用什么盆这样选容器根长得快映日荷花别样红,出于对荷花的喜爱,很多朋友都喜欢自己在家栽种荷花。这样夏季来临,朋友们在家就能欣赏到美丽的荷花。不过盆栽荷花并不容易,需要注意的事项有很多。栽种荷花是一个……我看不清他的脸(纪念平民英雄王立江)头条创作挑战赛我看不清他的脸文韵雨临风他是佳城不知疲倦的大白没有人知道他是谁当病毒猖獗、蔓延随时可能出现大面积感染危机时刻……图紫蔷薇的花语分析几种含义让你充分了解它蔷薇花喜欢成团成簇的开放,在开花期给人一种非常震慑的视觉享受。那么,紫色的蔷薇花有什么样的特点呢?你对蔷薇花的了解又有多少?下面就一起看看吧。一、紫色。紫色的蔷薇花……vivox80手机测评,说出你的真感觉今天买了一套x80,说一下一周感受,屏幕三星的感觉还是很不错的,用起来也很流畅,耗电还是挺快的,但是一天一充也是能够达到的,还有他的闪充真的是快的飞一样,半个小时差不多吧,……图紫灵芝的种植方法几个因素让你搞定栽培技术紫灵芝是一种非常稀有的中药,因为罕见,所以在种植上也会有一定的难度。那么,我们常见的种植手法就是大棚种植了,怎么才能让够紫灵芝更好的生长呢?一、生长发育周期。紫灵芝……图泰迪犬怎样训练更乖巧学会三个技巧让狗狗更温顺对泰迪犬进行科学而又有效的训练,可以不同程度地改善泰迪犬的神经类型和体型外貌,并且培养狗狗良好的行为特征。对于没有经验的主人,掌握合适的驯狗方法非常重要。很多爱宠人士都知……图紫藤萝花期这些养护小知识一定不可错过顾名思义,紫藤萝的花朵颜色大多为紫色,清新淡雅的花色为它增色不少,俘获了不少人的喜爱。那么你知道紫藤萝花期是什么时候吗?下面就来一起了解一下吧!了解紫藤萝花期盛开时间,能……图辨别萨摩耶幼犬必备的知识这样选才能买到纯种狗萨摩耶犬又被称为萨摩耶,原是西伯利亚的原住民萨摩耶族培育出的犬种,一岁前调皮、灵动。成年后的萨摩耶外表俊朗,性格乖巧,被众多爱宠人士称之为微笑天使。萨摩耶是外表非常好看的……
湖人击败灰熊,一套最强阵容浮出水面,沃格尔找到胜利的法宝湖人击败灰熊,一套最强阵容浮出水面,沃格尔找到胜利的法宝!湖人遭遇八连败之后,终于在第九场比赛中,以121比118击败灰熊,取得赛季首场胜利,这场比赛灰熊这帮年轻球员发挥……真正的女权主义!她是长征32位女红军之一,新中国首位女省委书《山海情》《觉醒年代》2021年主旋律献礼剧频现爆款,频频出圈。最近又有一部《功勋》热播,剧中有一个单元讲述了提出男女同工同酬的申纪兰奶奶的故事。中国妇女运动百年。在中国……火星生命的迹象?好奇号探测到甲烷嗝,科学家可能已找到来源到目前为止,人类已知的存在生命的星球就是我们地球,除此之外并没有在任何一颗外星球发现了外星生命,所以也有很多人认为,地球可能是宇宙中唯一的生命星球。这样的可能性也不是不存在,不……西虹市首富都说夏竹长得丑?当她放下刘海那一刻,美到不敢认西虹市首富:都说夏竹长得丑?当她放下刘海那一刻,美到不敢认20211114免责声明及投诉指引我不喜欢《西虹市首富》的女主角,为什么呢,因为我一直都觉得《西虹市……要不要生二胎?三胎?近期,听到身边人讨论最多的就是要不要生二胎,三胎的事。自从国家放开政策之后,很多人开始了思想斗争,要,谁不想要?可,养不起呀!不要,看着一个孩子孤单的背影,有心里难受呀!……李小璐在短视频平台上,发布了自己和女儿玩雪的视频,十分开心前天李小璐,在一个平台发出了他陪伴自己的女儿玩在外雪的视频,在视频中,李小璐身穿一件白色的羽绒服,头上带着毛线帽。李小璐和女儿十分的开心,甜馨身穿一身蓝色斑点的毛绒衣,头上戴着……井延坡工作室丨风华之美写在红军长征胜利85周年之际来源:中国军网微信解放军新闻传播中心融媒体作者:刘兴100年前,从上海石库门到嘉兴南湖,一群青年人,登上一艘小小红船,承载着人民的重托、民族的希望,越过急流险滩,穿过惊涛……现在是北京时间23点22刚才我一直反胃,因为我八点钟就睡觉了,当时人不舒服,睡了几个小时,发现反胃就强制性醒了,以我多年经验估计是吃混东西了,吃坏了肠胃,因为我八点钟没有吃夜宵,当时不怎么饿,这就是典……同样是马丁靴,配裙子和裤子的差别有多大?看这3组对比图你就懂如果要说今年秋冬季节的热门单品,一定有马丁靴,马丁靴可以说是秋季出镜率最高的一件单品,相比平底鞋或者是长筒靴也更能够打造出多种风格,而且他和裙装以及裤子搭配起来可以呈现不同的风……龙凤胎宝宝都取的什么名字?大家的龙凤胎宝宝都取的什么名字?都有什么寓意呢?有没有本来要按字辈取名,但没有按字辈取的〔呲牙〕当时取名就各种纠结,因为我老公家取名字都是按字辈的,到我娃这辈是垂字辈,真……丹羽孝希一位赢了他也会感觉被侮辱的神奇选手丹羽孝希:一位赢了他也会感觉被侮辱的神奇选手!说起大家最喜欢的日本乒乓球选手,女选手毋庸置疑是福原爱,男选手就更好选了,丹羽孝希必定上榜。丹羽孝希在中国被亲昵地叫做……秋冬最适合吃10道蒸菜,有荤有素,少盐无油烟,适合天冷进补而天气越发的凉了,下班回家都懒得动手做饭,只想吃口热乎的,那今天蓉儿就来为大家分享10道懒人蒸菜,蒸一蒸就出锅,好吃不上火,赶紧跟着蓉儿学起来吧!【梅菜扣肉】肥而不腻……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网