Spring

很多年前我工作的时候还是使用spring 2的版本,那个时候datasource、初始化bean对象、配置都是写在xml中,当时还是配合struts2来做的,但是后来Spring发展到3和4,用注解的方式慢慢取代了xml,又搞起了springmvc替换struts2再后来strus2被爆出漏洞,至此springmvc彻底替换了struts2,再后来大家又嫌写配置集成不同的插件存在的各种兼容性问题,于是又演变为springBoot,依靠官方的配置快速搭建一套服务,再后来随科技发展微服务理念盛行,于是基于SpringBoot的SpringCloud又成为了主流,在这里老生常谈以往的Spring或者SpringMVC其实已经没有多少的工程意义,毕竟技术要向前发展,个人认为工程问题就是用工程的态度去解决,最好别上升到“学术程度”,毕竟先辈开发出Spring及其衍生作品均是为了方便世人工作,我们最主要的目的是为了解决问题,我是认为没有必要每行源码都懂,比如在头条上看到某个人录音面试过程问hashmap的源码,有意思吗?为什么不问题hash函数的设计,为什么不问全域哈希?当然如果励志要加入Spring开源社区,那确实应该认真研读源码。所以本文基于SpringBoot和SpringCloud来讲解笔者近年来工作常用的组件以及基本概念还有各种坑。

常见基本概念

其实以现在Spring的发展来说,是否理解基本概念本质上来说基本无关紧要,毕竟这只是个工具,大部分工程师只要按照官网配置一般不会碰到大的问题,所以你不需要很了解,只要参考官网的配置将依赖写入pom文件中,在参考官网的配置或者随便百度一下应该跑起一个Springboot项目我认为对有点工作经验的人来说是没什么大问题的,并且现在的Spring推荐框架Springboot和Springcloud已经封装的很完善了。话又说回来当你真的遇到了脱离框架的问题的时候或者该框架本身出问题的时候或者你看该框架不爽要重做一个的时候那么理解这些基本概念吸收前者的精华我认为是很有用处的。当然除此之外还有个很关键的问题就是为了找工作面试,特别鄙视那些面试的时候脱离工作,总是问些概念、源码之类的。例如头条有个总是在面试时直播的叫程序x的。

以下简单介绍了基本的概念

1.什么是控制反转?什么是依赖注入?

控制反转是应用于软件工程领域中的,在运行时被装配器对象来绑定耦合对象的一种编程技巧,对象之间耦合关系在编译时通常是未知的。在传统的编程方式中,业务逻辑的流程是由应用程序中的早已被设定好关联关系的对象来决定的。在使用控制反转的情况下,业务逻辑的流程是由对象关系图来决定的,该对象关系图由装配器负责实例化,这种实现方式还可以将对象之间的关联关系的定义抽象化。而绑定的过程是通过“依赖注入”实现的。

控制反转是一种以给予应用程序中目标组件更多控制为目的设计范式,并在我们的实际工作中起到了有效的作用

依赖注入是在编译阶段尚未知所需的功能是来自哪个的类的情况下,将其他对象所依赖的功能对象实例化的模式。这就需要一种机制用来激活相应的组件以提供特定的功能,所以依赖注入是控制反转的基础。否则如果在组件不受框架控制的情况下,框架又怎么知道要创建哪个组件?

在Java中依然注入有以下三种实现方式:

构造器注入

Setter方法注入

接口注入

2.如何定义bean的作用域

通过scope属性定义,如果需要每次产生一个新的实例,声明为prototype,如果需要每次都返回一个实例,声明为singleton

3.Spring中支持的bean作用域

singleton:在IOC容器中仅存在一个Bean实例,以单例存在(默认)

prototype:一个bean可以定义为多个实例

request:每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境

session:一个HTTP Session定义一个bean,该作用域仅适用于WebApplicationContext环境

globalSession:同一个全局HTTP Session定义一个Bean,该作用域仅适用于WebApplicationContext环境

你可能感兴趣的:(Spring)