Spring FrameWork从入门到NB - Ioc

瘢结组合
• 阅读 924
SpringFramework是Spring全家桶的基础,并且已经是公认的java开发基准框架,现在的java开发,没有spring framework会寸步难行。

正是因为Spring已经变成了当前JAVA开发的事实上的霸主,绝大部分的JAVA项目都不太可能没有Spring,而且,最重要的,绝大部分的初学者如果不掌握Spring,你可能就很难入门:你拿不到offer,即使是小公司的offer你都拿不到。

所以初学者,包括大学校园里学完JAVA基础课程的学生,或者刚入职场的JAVA菜鸟,都有必要对Spring经历一遍“从入门到NB”的过程。

我们先从一个面试问题说起。

面试题:你对Spring Framework的理解

最常见的回答,包括:Java开源、可配置、一站式开发框架,核心是IOC与AOP,让开发者能够采用最简单的方式构建出企业级java应用。

很多小伙伴说完上面一段之后就停下来了,面试官很为难,只能继续问:然后呢?

小伙伴(心里嘀咕:还有什么然后...没了):嗯...然后就是可以使用注解的方式简化开发,帮助程序员完成了许多特别麻烦的配置,可以通过AOP实现分离关注,让程序员能够专注于实现业务逻辑本身......

这次就真的没有然后了。

其实个人觉得,对这个问题回答IOC和AOP,尤其是回答了Ioc和AOP之后就认为已经回答了有关Spring Framework的全部问题的,根本就没有说到点子上,或者说你根本就不了解Spring Framework。

对Srping Freamwork的概念的解释,上来首先说Srping Freamwork是一个容器,比直接说IOC和AOP给人的感觉要好得多。这些IOC、AOP、轻量级、松耦合之类的概念,对于你真正理解Srping Freamwork,或者说对于面试官很好的理解你对Srping Freamwork框架的认识和掌握,远没有以下知识点来的重要、且直接:

  1. Srping Freamwork其实是一个容器,这个容器以bean的方式管理我们创建的类
  2. 有了Srping Freamwork,程序员编写代码创建“类”之后,Srping Freamwork通过Ioc的方式帮助我们创建对象,也就是我们所说的bean
  3. Srping Freamwork创建bean之后,保存在容器中
  4. 我们在需要使用对象的时候,可以从Srping Freamwork容器中非常方便的获取(DL或DI)
  5. Srping Freamwork可以采用动态代理的机制创建bean,并在此基础上帮助程序员实现AOP功能

对于“如何理解Srping Freamwork”这个问题,以上几点大纲式的回答,感觉已经足够了。这个回答能起到提纲挈领的作用,面试官对其中任何一个问题感兴趣,都可以继续深入下去。

这样的回答,比干巴巴的Ioc、Aop、松耦合、可配置等等,更能切中要害。

当然,要想很好的深入回答面试官可能提出的进一步的问题,还需要继续深入学习。

什么是IoC

Ioc是Inversion of Control的首字母简写,即反转控制,其实Spring官网的文档介绍Ioc的时候,是说Ioc Container,反转控制容器:

Introduction to the Spring IoC Container and Beans
This chapter covers the Spring Framework implementation of the Inversion of Control (IoC) principle. IoC is also known as dependency injection (DI).

意思是说说Spring提供了一个容器、具有反转控制的能力,Spring容器的反转控制的能力和他的一个特性:dependency injection(DI)-依赖注入有关,Spring容器正是通过依赖注入来提供IoC能力。

所以说反转控制IoC其实和依赖注入(DI)是分不开的,Spring是通过DI提供IoC的。

为什么叫IoC-反转控制呢?所谓的反转,肯定是和传统的处理方式(类之间的依赖关系的处理方式)比较而言的。为说明问题,与Spring的“反转控制”相对应,我们假设传统的处理方式叫“正常的控制”。

假设我们创创建了一个类A,里面包含各种属性,其中一个属性(属性b)是另外一个类B。

“正常的控制”过程是这样的:在使用的时候我们会通过new创建类A的一个对象A1,给对象A1的各属性赋值,赋值过程中我们需要创建类B的对象B1,把对象B1赋值给A1的属性b。

每次应用需要使用类A的时候,我们可能都需要重复上述过程创建、准备好类A的对象,提交给应用去使用。

Spring IoC的控制方式从某种意义上理解正好和这个“正常的控制”相反(这应该也是反转控制这个名字的由来):Spring的IoC容器创建类A的对象A1,并创建对象B的对象B1,并且,Spring IoC容器还负责将对象B1“注入”到对象A1中,让A1不创建而直接持有对象B1。这样一来,Spring就反转了以往的对象创建的控制权:以往是对象A1掌握着创建自己的属性(对象B1)的控制权,现在这个控制权被反转了,A1没有控制权了,等着Spring IoC容器投喂(依赖注入)就好了。

IoC容器创建好的对象,我们统一管他叫bean,创建好的bean都装在容器中,应用随时可以从容器中获取。

所以,依赖注入DI是IoC容器在创建bean的过程中的一项技术或者概念,正是通过DI,Spring创建的对象才是一个“丰满的”、应用可以使用的对象,换句话说,DI是负责bean的属性赋值的,没有DI,Spring创建的对象就是一个无法使用的空对象。所以,DI可以说是IoC的灵魂,我们放在下一篇文章分析。

上一篇 Mybatis的log机制
下一篇 Spring FrameWork从入门到NB - 依赖注入DI

点赞
收藏
评论区
推荐文章
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年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
3年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Easter79 Easter79
3年前
Spring面试题总结
1、Spring是什么?Spring是一个轻量级的IOC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于java的配置。主要由以下几个模块组成:SpringCore:核心类库,提供IOC服务;
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Spring Boot WebFlux
背景大家都知道,SpringFramework是Java/Spring应用程序跨平台开发框架,也是JavaEE(JavaEnterpriseEdition)轻量级框架,其Spring平台为Java开发者提供了全面的基础设施支持,虽然Spring基础组件的代码是轻量级,但其配置依旧是重量级的。那是怎么解决了呢?当然
Stella981 Stella981
3年前
Spring 必知概念(一)
1、什么是Spring框架?Spring框架有哪些主要模块?Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。Spring框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安心的集成Spring框架,不必担心S
Java服务总在半夜挂,背后的真相竟然是... | 京东云技术团队
最近有用户反馈测试环境Java服务总在凌晨00:00左右挂掉,用户反馈Java服务没有定时任务,也没有流量突增的情况,Jvm配置也合理,莫名其妙就挂了
瘢结组合
瘢结组合
Lv1
少妇鬓边犹胜雪,黄昏月下更添香。
文章
4
粉丝
0
获赞
0