面试官:"说说你对Spring的理解"

Spring是一个十分庞大的体系,具体可以访问它的官网https://spring.io/projects进行详细了解。
首先,回答这个问题,可以先介绍一下Spring体系中的几个项目:

  • SpringFramework
  • SpringData
  • SpringSecurity
  • SpringBoot
  • SpringCloud
    当然,除了这些之外,Spring还包括很多其他的项目。
    接着,着重介绍SpringFramework这个项目,它是一个开源的Java/JavaEE全功能栈的应用程序,SpringFramework提供了一个简易的开发方式,这种开发方式可以避免使用写可能使底层代码变得繁杂混乱的大量的属性文件和不帮助类。
    Spring的这种低侵入式设计使代码的污染极低。
    SpringFramework包括以下部分:
    SpringFramework体系.png

Data Access/Integration模块:数据访问/集成
Web模块:提供了基本的Web开发的集成特性
AOP模块:提供了面向方面的编程实现,允许您定义多方拦截器和切入点,以干净解耦,实现的功能,应该分开的代码。
Aspects模块:提供与AspectJ的集成这又是一个功能强大且成熟的面向方面编程(AOP)框架
instrumentation模块:提供了一定的应用服务器中使用类工具的支持和类加载器实现
messaging模块:消息通知
Core Container模块:核心容器
Test模块:测试模块支持Spring组件使用JUnit或TestNG框架的测试

然后,我们在接受一下Spirng的核心概念:

  • Bean管理
  • 依赖注入(dependency injection),又称为控制反转(inversion of control)
  • 面向切面编程(AOP)
①Bean管理

与传统的应用程序不同,在Spring中将对象的创建交给Spring容器来管理,也就是说只有放入Spring容器中的类,Spring才能对其产生作用。那么Spring究竟是怎样获取类的对象的呢?
要想知道这个,我们首先要弄清楚这几点:
BeanFactory是Spring容器的根接口,ApplicationContext是它的子接口,通常用它的子接口ApplicationContext来访问Spring容器。

ApplicationContext子接口常用的有四个实现类:
  • ClassPathXmlApplicationContext 从 classpath 加载 spring 的配置文件
  • FileSystemApplicationContext 从系统文件加载 spring 的配置文件
  • AnnotationConfigApplicationContext 获取基于注解的 spring 容器对象
  • XmlWebApplicationContext 在 web 环境中获取 spring 容器对象
    Spring通过BeanFactory来获取这些类的对象,在配置文件中通过<bean/>节点将类交给Spring行管理,ApplicationContext的实现类通过getBean()方法从Spring容器中获取对象,认为单例的。
②依赖注入

它可以降低类之间的耦合性,有两种注入方式:

  • set注入,在配置文件中使用<property>节点


    set注入.jpg
  • 构造方法注入,在配置文件中使用<constructor-arg>节点


    构造方法注入.png

    下面举个例子来说明一下什么是依赖注入:
    假设类A因功能F需要调用类B,传统的程序中,我们就会去new一个类B的对象,因而类A就会依赖类于类B,这就是说如果类B不存在,则类A也就无法使用。而使用依赖注入以后,类A只需要去调用实现功能F接口的一个实现类,这个实现类可能是类B,C等等,具体调用谁是由Spring的配置文件决定的,这样类A就不再依赖于类B。
    我们可以这样理解控制反转:
    资源不是由使用资源的双方进行管理,而是由不使用资源的第三方(即Spring容器)进行管理,这样做的好处是:

  • 资源集中管理,实现资源的可配置与易管理

  • 降低使用资源双方的依赖程度

在传统程序中,当某个角色需要另外一个角色协助时,由调用者来创建被调用者的实例。而在Spring中,创建被调用者的的工作不再由调用者来完成,而由第三方Spring容器来完成,所以称为控制反转,Spring容器创建被调用者的实例,然后注入调用者,所以又称为依赖注入。`

③面向切面编程

AOP在Spring中主要表现在两个方面:

  • 提供声明式事务管理
  • Spring支持用户自定义切面
    面向切面编程是对面向对象编程(OOP)的补充。面向对象编程将程序分解成为各个层次的对象,面向切面编程将程序运行过程分解成各个切面。面向切面编程基于动态代理实现,降低了类直接的耦合程度。Spring的事务管理就是基于AOP实现的。

推荐文章:https://www.2cto.com/kf/201406/305929.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,168评论 19 139
  • 本文是我自己在秋招复习时的读书笔记,整理的知识点,也是为了防止忘记,尊重劳动成果,转载注明出处哦!如果你也喜欢,那...
    波波波先森阅读 12,343评论 6 86
  • 岁尾年初,大家都在写总结和展望。也来凑个热闹,谈谈全球范围内银行业尤其是零售银行业的发展趋势。在吃货眼中,当前银行...
    北美之北阅读 586评论 2 11
  • 1、《老婆发火的时候,老公该怎么办》 这个标题就是提问式,引起读者好奇 2、《别逼老师放弃你的孩子(这几种家长,老...
    smellfish999阅读 370评论 0 0
  • 通了电话,她过得很好,总是给人很正的一面!给你讲好的,高兴的,开心的,希望她一直这样!一切美好!
    犹可以阅读 173评论 1 0