面试中的被问到Spring,咱们该怎么去回答

今天只谈一下咱们在面试中的若是面试官问到Spring,你应该怎么去回答,来获取面试官的青睐。在个人印象中,Spring框架能够说是Java世界里面最为成功的框架了,在企业的实际的应用里面,大部分的企业架构都是基于Spring框架的,它的成功来自于他的理念而不是技术,最为核心的理念是IOC和AOP。接下来咱们就来说讲这个Spring吧!面试

Spring的历史

Spirng从2004年第一个版本至今已经有十多年了,Spring的出现是由于当时Sun公司EJB的失败,由于当时的EJB2的时代,那配置文件但是很是的多呀,亏了我没在那个时代去作开发,去写代码,否则我估计本身可能怎么凉的都不知道。数据库

而在以后的EJB3客服了配置方面的冗余,可是对于JAVAEE开发来讲,更为致命的是对EJB容器的依赖,也就是EJB智能运行在EJB容器中,EJB容器的笨重,让不少企业感到熟手无策。编程

正是由于EJB的没落,致使了Spring的崛起,在Spring中,它会认为一切Java的类都是资源,而自愿都是BEan,容纳这些Bean的Spring所提供的IOC容器,因此Spring是一种基于Bean的编程。安全

面试问法一:什么是Spring

回答:Spring是一个J2EE的框架,这个框架提供了对轻量级IOC的良好支持,同时也提供了对AOP技术很是好的封装,相比于其余的框架,Spring框架的设计更加模块化,框架内的每一个模块都能完成特定的工做, 并且各个模块能够独立的运行,不会相互的前置,所以,在使用Spring框架的时候,咱们可使用整个框架,也可使用框架中的一部分,例如只使用AOP模块的日志管理。架构

回答这个问题的时候,不须要去特别的背诵到底什么是Spring,咱们要说出本身对Spring框架的理解就能够了,不少时候面试官多是问你的是你本身对框架的理解,而不是全篇背诵。框架

面试问法二:Spring有哪些模块

图解以下,模块化

 

上面就是Spring的一些模块,在面试中,咱们把这七个模块说完,要作出相应的一些讲解。好比说:函数

  • SpringAOP:采用了面向切面的思想,使Spring框架管理对象支持AOP,同事这个模块也提供了事务管理,能够不依赖具体的EJB组件,就能够将事务管理集成到应用程序中。单元测试

  • SpringORM:提供了对现有的ORM框架的支持,例如Hibernate,JDO,Mybatis等。学习

  • SpringDAO:提供了对数据访问对象(Data Access Object,DAO)模式和JDBC的支持,把实现业务逻辑和数据库访问的代码实现分离等。

  • SpringWeb:提供了Servlet监听器的Context和Web应用的上下文,同时还集成了一些现有的Web框架,如Struts。

  • SpringContext:扩展核心容器,提供了Spring上下文环境,给开发人员提供了有用的服务。

  • SpringWebMVC:提供了一个构件Web应用程序的MVC实现。

  • SpringCore:Spring框架的核心容器,他提供了Spring框架的基本的功能,这个模块最主要的是BeanFactory,它使用工厂模式来建立所须要的对象,同时Beanfactory使用IOC的思想,经过读取XML文件的方式来实例化对象。

上面介绍只是在面试的时候一些简单的介绍,能够自行理解,问到这个问题的时候,面试官可能并非让你把每一个模块都分析的特别透彻,不少状况下都是想看你到之对Spring的理解有多深。

面试问法三:Spring的核心是哪两个?

Spring核心内容:IOC和AOP。

在面试过程当中,说完核心内容以后,必定要把什么是IOC,什么是AOP解释清楚,而且举个大家项目中的例子来加以验证。这个时候,面试官可能就会以为,你对Spring的应用已经很透彻了。

要点一:什么是IOC?

控制反转(Inverse of Control,IOC)有时候也被称之为依赖注入,是一种下降对象之间耦合关系的设计思想。通常来讲,在分层体系结构中,都是上层调用下层的接口,依赖注入最直接的提现,@AutoWired,@Resource这个注解,

上层调用下层的接口,上层依赖于下层的执行,也就是调用者依赖被调用者,而经过IOC方式,是的上层再也不依赖下层的接口,经过注入实例化对象来选择不一样的下层实现,来是先控制反转。

采用IOC机制能过提升系统的可扩展性,若是对象之间经过显式调用进行交互会致使调用者和被调用者存在很是紧密的联系,其中一方若是出现变更,那么系统也会进行相应的修改。

就举个例子,一家商店,出售茶叶,刚开始,店主就只有绿茶出售,那么至关因而 AbstractTea1 = new GreenTea();可是若是说店家发现绿茶销售不如隔壁的红茶销售好,就想着进红茶卖,那么在这个售货系统过中,凡事出现过AbstractTea1 = new GreenTea(),都得修改为AbstractTea1 = new BlackTea()。

而这种建立对象实例的方法每每会对致使程序作大幅度的修改。

画个图来看一下

经过图中的方法,能够把建立对象的过程委托给TeaFactory来完成,在咱们须要使用对象的时候,咱们就直接调用Factroy类中的getTea方法便可,具体建立对象逻辑放在了TeaFactory中来实现,咱们只须要把Greentea换成BlackTea,那么系统中全部的AbstractTea1 = new GreenTea()这个方法就会替换成BlackTea了,只须要在一个地方作改动就能完成很复杂的事情了。

虽说采用工厂模式以后,加强了系统的可扩展性,可是从本质上讲,工厂模式只不过是把程序中变更的逻辑所有都放到了工厂类中了,当系统的类比较多的时候, 就会常常的去改动工厂类中的代码,咱们采用IOC实现方法以后,就会有另一种。

Spring容器将会根据配置文件来建立调用者对象,同时把被调用的实例化对象经过构造函数或者set()方法的形式注入到调用者对象中。

而咱们回答面试官的问题的时候,同时须要把IOC的优势也要说出来。

IOC优势:

  1. 经过IOC容器,开发人员不须要关注对象是怎么去建立的,同时增长新的类也比较方便了。
  2. IOC容器能够经过配置文件来肯定须要注入的实例化对象,所以很方便进行单元测试。

要点二:什么是AOP?

面向切面编程(Aspect Oriented Programming)是面向对象开发的一种补充,他容许开发人员在不改变原来模型的基础上动态的去修改模型用来知足新的需求,例如,开发人员能够在不更改原来业务逻辑模型的基础上动态的增长日志,安全或者异常处理的功能。

AOP的基本概念

  1. Aspect(切面):一般是一个类,里面能够定义切入点和通知

  2. JointPoint(链接点):程序执行过程当中明确的点,通常是方法的调用

  3. Advice(通知):AOP在特定的切入点上执行的加强处理,有before,after,afterReturning,afterThrowing,around

  4. Pointcut(切入点):就是带有通知的链接点,在程序中主要体现为书写切入点表达式

  5. AOP代理:AOP框架建立的对象,代理就是目标对象的增强。Spring中的AOP代理可使JDK动态代理,也能够是CGLIB代理,前者基于接口,后者基于子类

上面这些内容其实不少时候在面试的时候不用说的这么清楚,由于咱们在面试的过程当中,并不必定可以记得这么清楚,到时候须要咱们表述一个大概的内容便可。

实现代理的两种代理方式:

  • 静态代理(我的理解)

针对具体的类编写代理类。 针对一个接口编写一个代理类。

  • 动态代理

而动态代理也能够分为2种,一种是JDK Proxy,另一种是cglib代理。Spring对于有接口的类使用JDK Proxy,对于无接口和抽象类用Cglib代理,虽然Cglib能够进行代理,可是Cglib代理是有例外,就是代理类中不能出现final修饰的类或者类中有final修饰的方法。

若是以上的内容你在面试的过程当中,大体上都说出来了,那么对于面试Spring这一块,可能概率从百分之50上升到百分之八十了。

也祝你们在将来的面试过程当中,一直稳如泰山!

写在最后

  • 第一:看完点赞,感谢您的承认;
  • ...
  • 第二:随手转发,分享知识,让更多人学习到;
  • ...
  • 第三:记得点关注,天天更新的!!!
  • ...

相关文章
相关标签/搜索