转自http://hui.sohu.com/infonews/article/6331404387079946240

spring呢,是pivotal公司维护的一系列开源工具的总称,最为人所知的是spring mvc,事实上,他们都是基于spring framework,并且再其上继续增强,为某一方面服务的java组件。最近spring framework 刚升级到5,非常不错。比较常见的有spring boot,spring mvc,spring webFlux。过去spring framework被成为XML地狱,目前的版本已经大为改善,并且在其十来个组件当中,基本上涵盖了java开发的绝大多数,是一套非常成熟稳健的java应用框架。

我有次面试被问到spring IOC的时候不想再官方话,打了个比方,IOC它就类似于一个菜筐,以前你需要自己去菜市场买菜,现在你只要在家门口放一个菜框applicationcontext.xml或者也叫???.xml,然后就有人给你发菜,你想要什么样的菜也就是bean,在菜筐留个纸条预定下,想要青菜会发青菜,想要蘑菇会发蘑菇,青菜你想要菠菜或者生菜再预定下property,蘑菇想要土菇或者金针菇也可以预定下property,然后就会发菜了,你就可以不出门坐家里等着发菜做饭了

你要知道,首先Spring是一个大的概念,Spring从最开始的一个Library到现在一个系列,其中最主要的包括Spring Framework, Spring Data, Spring Security, Spring Batch等等,以及快速框架Spring Boot,其中最重要的项目是Spring Framework,这个项目包括了IoC, AOP, MVC以及Testing。

第一个需要明白的是Spring的核心思想是什么?

Spring整个系列的最最核心的概念当属IoC, AOP,什么是IoC和AOP就不展开了,简而言之,将对象创建过程的职责赋予容器,通过容器管理对象的生老病死, 将对象创建过程从编译时延期到运行时,即通过配置进行加载,这样一来就解决了不用编译后期选择具体实现,其实就是面向对象的核心理念,针对接口编程。java学习干货面试经验裙:282711949。IoC开始就是个factory加上依赖管理罢了,这样一来,一个系统的创建过程就从原先的new改为配置组装,内部通过注入解决了依赖关系,只要满足接口协议即插即用。通过IoC, AOP事实上形成了一个套路,通过这个套路完成了系统的整合。

所以Spring并没有说自己写一个ORM,而是用统一的套路完成了多个ORM的集成,这也是Spring越做越大的基础,慢慢就形成了Spring Way,其实这个才是Spring最有价值的地方。

第二当然就是一些实践,其实主流问的大概也就几个方向,用的最多的应该就是Spring MVC, Spring Data, Spring Security和Spring Boot这几块吧,因为毕竟这是实践性内容,很多时候都是show me the code,之前学习过程写过一个sample,基本全是标准Spring Way,你可以拿去参考一下,GitHub - nonocast/todolist: A simple todolist system implemented with Spring's backend and TypeScript/React's frontend. Enjoy it.

pring Boot
Spring MVC
Spring Security
Gradle
Freemarker
WebJars
Spring Data JPA
Mysql
Wechat
React
TypeScript
webpack
Redis
May it helps.

其实软件源于生活一点也没错。

在生活中对于男性来说,如果有某方面需要,怎么办?找个女人结婚就是直接new一个对象,但是有一天发现我不要和这个人啪啪啪了,那就离婚再new一个对象,但是这样牵扯到财产分割以及一大堆手续什么的太麻烦,换而言之就是耦合度太高,解耦麻烦。

这时候聪明的人类想出了一个办法,ji院!

比如天上人间,一个个如花似玉的姑娘实现了一个叫做”小姐”的接口。当男人们有需要时,去天上人间,说:我要一个MM,这时候MM指向的某个具体对象通过依赖注入的方式给客户服务。下次再去时想换个不同口味的,提出的需求仍旧是我要一个MM,因为这里MM是多态的(同一父类型的引用指向不同对象)。

这就是通过接口类型注入对象的好处,采用这种方式耦合度就大大下降了。

现在你明白了吧,spring之所以叫做spring,顾名思义就是春嘛。spring容器就是买春的容器就是ji院!

面试-Spring理解的更多相关文章

  1. Spring理解1 ioc

    Spring Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器(框架).   需要了解 ioc容器 IOC底层原理 IOC接口 BeanFactory Bean的作用域 IOC操 ...

  2. spring理解

    Struts与Hibernate可以做什么事? Struts,Mvc中控制层解决方案,可以进行请求数据自动封装.类型转换.文件上传.效验… Hibernate,持久层的解决方案:可以做到,把对象保存到 ...

  3. 【面试 spring boot】【第十七篇】spring boot相关面试

    spring boot相关面试 ====================================================== 1.spring boot启动类  启动原理 参考:htt ...

  4. 面试Spring之bean的生命周期

    找工作的时候有些人会被问道Spring中Bean的生命周期,其实也就是考察一下对Spring是否熟悉,工作中很少用到其中的内容,那我们简单看一下. 在说明前可以思考一下Servlet的生命周期:实例化 ...

  5. spring 理解Spring AOP 一个简单的约定游戏

    应该说AOP原理是Spring技术中最难理解的一个部分,而这个约定游戏也许会给你很多的帮助,通过这个约定游戏,就可以理解Spring AOP的含义和实现方法,也能帮助读者更好地运用Spring AOP ...

  6. 面试 Spring Boot 再也不怕了,答案都在这里!

    问: 什么是spring boot? 答:多年来,随着新功能的增加,spring变得越来越复杂.只需访问页面https://spring.io/projects,我们将看到所有在应用程序中使用的不同功 ...

  7. 【5】进大厂必须掌握的面试题-Java面试-spring

    spring面试问题 Q1.什么是spring? Spring本质上是一个轻量级的集成框架,可用于用Java开发企业应用程序. Q2.命名Spring框架的不同模块. 一些重要的Spring Fram ...

  8. Spring理解IOC,DI,AOP作用,概念,理解。

    IOC控制反转:创建实例对象的控制权从代码转换到Spring容器.实际就是在xml中配置.配置对象 实例化对象时,进行强转为自定义类型.默认返回类型是Object强类型. ApplicationCon ...

  9. 【面试 spring】【第七篇】spring的问题

    1.spring你熟悉么?两大特色 spring 主要有IOC和AOP两大特色. =========================================================== ...

随机推荐

  1. Neutron命令测试5

    jolin@jolin:/$ route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface ...

  2. jdk 动态代理 数据连接池

    package com.itheima.datasource; import java.io.PrintWriter; import java.lang.reflect.InvocationHandl ...

  3. 案例53-crm练习修改客户功能实现

    1 CustomerAction 完整代码: package www.test.web.action; import java.io.File; import org.apache.commons.l ...

  4. 《Head First 设计模式》总结

    复合模式——模式的模式 MVC(模型-视图-控制器):是由数个设计模式结合起来的模式. 戴着模式的有色眼镜看MVC: 模型利用观察者模式让控制器和视图可以随最新的状态改变而更新. 模型对视图和控制器一 ...

  5. python面试题——网络编程和并发

    1.简述 OSI 七层协议. 物理层(电信号.比特流) 基于电器特性发送高低电压(电信号) RJ45.IEEE802.3 数据链路层(数据帧) 定义了电信号的分组方式,分组方式后来形成了统一的标准,即 ...

  6. cube.js 开源模块化分析框架

    cube.js 是一款很不错的模块化web 应用分析框架.cube.js 的设计主要是面向serverless 服务, 但是同时也支持所有rdbms, cube.js不是一个单体应用,包含了以下部分: ...

  7. Mysql慢查询 [第二篇]

    一.简介 pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog.General log.slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdu ...

  8. h5:WebSocket

    实时 Web 应用的窘境 Web 应用的信息交互过程通常是客户端通过浏览器发出一个请求,服务器端接收和审核完请求后进行处理并返回结果给客户端,然后客户端浏览器将信息呈现出来,这种机制对于信息变化不是特 ...

  9. Appium 滑动界面swipe用法

    Appium 滑动API:Swipe(int start x,int start y,int end x,int y,duration) 解释:int start x-开始滑动的x坐标, int st ...

  10. Struts2_Namespace

    namespace 决定了action的访问路径,默认为"",可以接收所有路径的action,当精确的index.action处理不了的时候,就会找到这个action;namesp ...