Spring实战(1)

Easter79
• 阅读 665

本博客是参考Spring实战第四版,对其中重要的知识点进行总结。

  • Spring是如何简化java开发的?

答:(1)基于POJO的轻量级和最小侵入性编程;(2)通过依赖注入和面向接口来松耦合;(3)基于切面和惯例进行声明式编程;(4)通过切面和模板来减少样板式代码;

  • 配置Spring容器三种主要的装配机制?

答:(1)在XML中显示配置;(2)在java中进行显示配置;(3)隐式的bean发现机制和自动装配;

  • Spring从两个角度来实现自动化装配?

答:(1)组件扫描:Spring会自动发现上下文中所创建的bean;(2)自动装配:Spring自动满足bean之间的依赖;

  • Spring依赖注入DI的功能是如何实现的?

答:任何一个有实际意义的应用都会由两个或者多个类组成,这些类之间相互协作来完成特定的业务逻辑。按照传统的做法,每个对象负责管理与自己相互协作的对象的引用,这样会导致高度耦合并难以测试。例如如下代码:

Spring实战(1)

可以看到,DamselRescuingKnight在它的构造函数中创建了RescueDamselQuest。这使得DamselRescuingKnight紧密的和RescueDamselQuest耦合到了一起,因此就极大的限制了这个骑士探险的能力。而通过DI,对象的依赖关系将由系统中协调各对象的第三方组件在创建对象的时候进行设定。对象无需自己创建或者管理他们的依赖关系。Spring实战(1)

Spring实战(1)

我们可以看到,不同于之前的DamselRescuingKnight,BraveKnight没有没有自行创建探险任务,而是在探险的时候把任务作为参数传入。

  • 观察Spring是如何工作的?

答:Spring通过应用上下文(Application Context)装载bean的定义并把他们组装起来。Spring上下文全权负责对象的创建和组装。

Spring实战(1)

  • AOP应用?

Spring实战(1)

正如你所看到的,Minstrel是只有两个方法的简单类。在骑士探险之前或者之后都会调用相应的函数。接下来我们该如何把吟游诗人和骑士探险结合起来呢?如果是如下方式调用,

Spring实战(1) 这样就到时每次骑士进行探险都要命令吟游诗人去给他进行记录,这样合理吗?所以我们利用AOP,你可以声明吟游诗人必须去歌颂骑士探险,而骑士不需要去管吟游诗人。将Minstrel声明一个切面。

Spring实战(1)

  • Spring帮助我们管理Bean分为两个部分,一个是注册Bean,一个装配Bean。

答:完成这两个动作有三种方式,一种是使用自动配置的方式、一种是使用JavaConfig的方式,一种就是使用XML配置的方式。在自动配置的方式中,使用@Component去告诉Spring,我是一个bean,你要来管理我,然后使用@AutoWired注解去装配Bean(所谓装配,就是管理对象直接的协作关系)。然后在JavaConfig中,@Configuration其实就是告诉spring,spring容器要怎么配置(怎么去注册bean,怎么去处理bean之间的关系(装配))。那么久很好理解了,@Bean的意思就是,我要获取这个bean的时候,你spring要按照这种方式去帮我获取到这个bean。到了使用xml的方式,也是如此。均不见标签就是告诉spring怎么获取这个bean,各种就是手动的配置bean之间的关系。如下图分别是三种方式的代码:

Spring实战(1) Spring实战(1) Spring实战(1)

  • 配置profile bean?

答:Spring为环境相关的bean所提供的解决方案其实与构建时的方案没有太大区别。当然,在这个工程中需要根据环境决定常见那个bean和不创建那个bean。不过Spring并不是在构建的时候做出这样的决策,而是等到运行来再决定。这样的结果就是同一个部署单元能够使用说有的环境,没有必要进行重新构建。Spring引入了bean profile功能。可以使用@profile来指定那个bean属于profile。

Spring实战(1)

在Spring确定那个profile处于激活状态时,需要依赖两个独立的属性:spring.profiles.active和spring.profiles.default。如果设置了spring.profiles.active属性的话,那么他的值就会用来确定那个profile被激活;如果没有设置spring.profiles.active的话,那么spring将会查找spring.profiles.default值。如果这两个都没有设置的话,那么就没有profile被激活。可以在web.xml中设置默认的profile。

Spring实战(1)

  • 限定自动装配的bean:@qualifier注解是使用限定符主要方式之一。Spring实战(1)

  • bean的作用域?

答:在默认情况下bean是以单例的形式创建的。也就是说,不管一个bean被注入到其他bean中多少次,每次所注入的都是一个实例。Spring定义了多种作用域,可以基于这些作用域来创建bean,包括:单例(Singleton):在整个应用中,只创建一个bean的实例;原型(Prototype):每次注入或者通过应用上下文获取的时候,都会创建一个新的bean实例;会话(session):在web应用中,为每个会话创建一个bean实例;请求(Request):在web应用中,为每个请求创建一个bean实例。Spring实战(1)

  • 运行时值注入?

答:Spring提供了两种在运行时求值的方式:(1)属性占位符(Property placeholder);(2)Spring表达语言(SpEL)。Spring实战(1) Spring实战(1)

在XML中进行配置:

Spring实战(1)

使用SpEL表达语言:

Spring实战(1)

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Java修道之路,问鼎巅峰,我辈代码修仙法力齐天
<center<fontcolor00FF7Fsize5face"黑体"代码尽头谁为峰,一见秃头道成空。</font<center<fontcolor00FF00size5face"黑体"编程修真路破折,一步一劫渡飞升。</font众所周知,编程修真有八大境界:1.Javase练气筑基2.数据库结丹3.web前端元婴4.Jav
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Easter79 Easter79
3年前
Spring常用知识点总结
1\.Spring有哪些优点?  轻量级:Spring在大小和透明性方面绝对属于轻量级的,基础版本的Spring框架大约只有2MB。  控制反转(IOC):Spring使用控制反转技术实现了松耦合。依赖被注入到对象,而不是创建或寻找依赖对象。  面向切面编程(AOP): Spring支持面向切面编程,同时把应用的业务逻辑与系统的服务分离开来
Easter79 Easter79
3年前
Spring知识点提炼
1\.Spring框架的作用清理:Spring是轻量级的,基本的版本大小为2MB控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。面向切面的编程AOP:Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。容器:Spring包含并管理应用中对象
Stella981 Stella981
3年前
Spring IOC 容器源码分析——一篇文章读懂Spring5.x
Spring设计的初衷Spring则立志于全方面的简化Java开发。对此,她主要采取了4个关键策略: 1、基于POJO的轻量级和最小侵入性编程;2、通过依赖注入和面向接口松耦合;3、基于切面和惯性进行声明式编程;4、通过切面和模板减少样板式代码; 而他主要是通
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k