1. spring 概述部分

1.1 什么是spring?
1.2 spring框架的核心?
1.3 spring框架的优缺点
1.4 spring5 的主要模块构成
1.5 Spring 框架中都用到了哪些设计模式?
1.6 讲解一下核心容器(spring context应用上下文) 模块

2. spring的控制反转(IOC)

2.1 什么是Spring IOC 容器?
2.2 IOC 有什么作用?
2.3 使用IOC容器的优点?
2.4 spring IOC支持哪些功能
2.5 BeanFactory 和 ApplicationContext有什么区别?
2.6 ApplicationContext通常的实现是什么?
2.8 什么是Spring的依赖注入?
2.9 依赖注入有什么优势?
2.10 有哪些不同类型的依赖注入实现方式?
2.11 构造器依赖注入和Setter方法注入的区别

3. spring 的 Bean

3.1 什么是Spring bean?
3.2 一个 Spring Bean 定义 包含什么?
3.3 如何给Spring 容器提供配置元数据?Spring有几种配置方式
3.4 Spring基于xml注入bean的几种方式
3.5 你怎样定义类的作用域?
3.6 解释Spring支持的几种bean的作用域?
3.7 Spring框架中的单例bean是线程安全的吗?
3.8 Spring如何处理多线程并发问题?
3.9 使用@Autowired注解自动装配的过程是怎样的?
3.10 你可以在Spring中注入一个null 和一个空字符串吗?

4. spring的常用注解

4.1 什么是基于Java的Spring注解配置? 给一些注解的例子
4.2 怎样开启注解装配?
4.3 @Component, @Controller, @Repository, @Service 有何区别?
4.4 @Required 注解有什么作用
4.5 @Autowired 注解有什么作用
4.6 @Autowired和@Resource之间的区别
4.7 @Qualifier 注解有什么作用
4.8 @RequestMapping 注解有什么用?

5. spring的数据访问

5.1 JdbcTemplate是什么
5.2 Spring支持的事务管理类型, spring 事务实现方式有哪些?
5.3 说一下Spring的事务传播行为
5.4 说一下 spring 的事务隔离?
5.5 Spring框架的事务管理有哪些优点?
5.6 Spring框架的事务管理有哪些优点?
6.6 spring的面向切面编程(AOP)

6.1 什么是AOP

6.2 Spring AOP and AspectJ AOP 有什么区别?AOP 有哪些实现方式?
6.3 JDK动态代理和CGLIB动态代理的区别
6.4 如何理解 Spring 中的代理?
6.5 解释一下Spring AOP里面的几个名词
6.6 Spring通知有哪些类型?
6.7 什么是切面 Aspect?

答案

1. spring 概述部分

1.1 什么是spring?

spring是一个轻量级的JavaEE开源框架,开发spring的根本使命目的是为了企业应用开发的复杂性,即简化Java开发。
spring的两个核心特性:控制反转和面向切面编程,即IOC和AOP。
spring 的特点:

(1)轻量:从大小和开销方面而言spring都是轻量的,处理开销也是微不足道的。
(2)IOC:削减计算机之间的耦合,降低程序代码中的依赖关系。
(3)AOP:通过配置管理特性spring的AOP,可以将一些通用的任务,如安全,事务,日志等集中进行管理,提高了程序的复用性和管理型。
(4)容器:Spring提供了容器功能,容器可以管理对象的生命周期、对象与对象间的关系、我们可以通过编写XML来设置对象关系和初始值,这样容器在启动之后,所有的对象都直接可以使用,不用编写任何编码来产生对象。Spring有两种不同的容器:Bean工厂以及应用上下文。
框架:可以将简单的组件配置,组成复杂的应用,spring也提供了很多基础功能(事务管理,持久化框架集成)将应用逻辑留给开发者。

1.2 spring框架的核心?

IOC和AOP模块。通过IOC容器管理POJO或JavaBean对象,以及它们之间的耦合关系;通过AOP以动态非入侵的方式增强服务。

1.3 spring框架的优缺点

优点:

(1)方便解耦,简化开发
Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护(DI),交给Spring管理。

(2)AOP编程的支持
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控和增强等功能。

(3)声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程。

(4)方便程序的测试
Spring对Junit4支持,可以通过注解方便的测试Spring程序。

(5)方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架的直接支持(如:Struts、Hibernate、MyBatis等)。

(6)降低JavaEE API的使用难度
Spring对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低。

缺点:

(1)Spring明明一个很轻量级的框架,却给人感觉大而全,内容太庞大。
(2)Spring依赖反射,反射影响性能
(3)使用门槛升高,入门Spring需要较长时间

1.4 spring5 的主要模块构成

Spring 总共大约有 20 个模块, 由 1300 多个不同的文件构成。 而这些组件被分别整合在核心容器(Core Container) 、 AOP(Aspect Oriented Programming)和设备支持(Instrmentation) 、数据访问与集成(Data Access/Integeration) 、 Web、 消息(Messaging) 、 Test等 6 个模块中。 以下是 Spring 5 的模块结构图

(1)spring core:提供了框架的基本组成部分,包括控制反转(Inversion of Control,IOC)和依赖注入(Dependency Injection,DI)功能。
(2)spring beans:提供了BeanFactory,是工厂模式的一个经典实现,Spring将管理对象称为Bean。
(3)spring context:构建于 core 封装包基础上的 context 封装包,提供了一种框架式的对象访问方法。
(4)spring jdbc:提供了一个JDBC的抽象层,消除了烦琐的JDBC编码和数据库厂商特有的错误代码解析, 用于简化JDBC。
(5)spring aop:提供了面向切面的编程实现,让你可以自定义拦截器、切点等。
(6)spring Web:提供了针对 Web 开发的集成特性,例如文件上传,利用 servlet listeners - 进行 ioc 容器初始化和针对 Web 的 ApplicationContext。
(7)spring test:主要为测试提供支持的,支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试。

1.5 Spring 框架中都用到了哪些设计模式?

工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例;
单例模式:Bean默认为单例模式。
代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术;
模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。

1.6 讲解一下核心容器(spring context应用上下文) 模块

应用上下文模块是spring框架的基本模块,BeanFactory是任何以spring为基础的应用的核心,spring框架建立在context这个模块上,使得spring成为一个容器。
Bean工厂是工厂模式的一个实现,提供了控制反转的功能。用来把应用的配置和依赖真正从代码中分离出来。最常用的是根据xml文件加载bean对象进IOC容器中,使得的类是ApplicationContext的实现类org.springframework.beans.factory.xml.XmlBeanFactory。

2. spring的控制反转(IOC)

2.1 什么是Spring IOC 容器?

所谓控制反转主要是把传统上的程序直接向内存中申请空间创建对象的这个控制权转移到了外部工厂,通过工厂来对这些创建好的对象进行装配和管理。外部工厂即我们常说的IOC容器,spring IOC负责创建对象,管理对象(依赖注入,装配对象Autowride)并管理这些对象的整个生命周期。

2.2 IOC 有什么作用?

(1)管理对象的创建和依赖关系的维护。
(2)解耦降低了依赖,由容器去维护具体的对象的创建。
(3)bean对象生命周期管理。

2.3 使用IOC容器的优点?

(1)IOC和DI的配合使用能把应用的实际代码量降到最低。
(2)spring集成了自己的测试模块,无需依赖于junit。
(3)IOC容器支持立即加载和延迟加载(懒加载)。

2.4 spring IOC支持哪些功能

(1)依赖注入
(2)依赖检查
(3)自动装配
(4)支持集合

2.5 BeanFactory 和 ApplicationContext有什么区别?

BeanFactory 和 ApplicationContext都是spring的两个核心的接口,都可以当作容器来使用,其中BeanFactory是ApplicationContext父接口。它们之间的区别由:
依赖关系:BeanFactory是spring中最底层的接口,包含了各种bean的定义,读取bean的配置文档,管理bean的加载,实例化,控制bean生命周期,维护bean之间的依赖关系。
而ApplicationContext作为BeanFactory 的子接口,除了BeanFactory本身的功能外,提供了更加完善的框架功能。如:

(1)继承MessageSource,因此支持国际化。
(2)统一资源文件的访问方式
(3)同时加载多个配置文件
(4)提供监听器中注册bean的事件
加载方式:BeanFactory采用的是延迟加载的方式,即当我们要使用bean时调用getBean方法开始实例化bean对象。如此我们容易遇到就是在配置文件中忘记配置bean(未注入),而去调用它的getBean对象,将会抛出异常。
ApplicationContext是在容器启动后,创建所有的bean,比起BeanFactory的加载方式,采用ApplicationContext的加载更容易发现spring配置中的问题,有利于检查依赖是否注入,加载出来的单例bean对象,可以直接拿去用而不用等待。
创建方式:BeanFactory通常以编程的形式被创建,而ApplicationContext还能以声明的形式被创建,如ContextLoader.

2.6 ApplicationContext通常的实现是什么?

ClassPathXmlApplicationContext:此容器从xml中加载beans的定义,将在classpath中寻找bean的定义。
FileSystemXmlApplication:和ClassPathXmlApplicationContext类似从xml中加载beans的定义,但是范围可以时硬盘上的任意位置,只要有访问权限。
AnnotationConfigApplicationContext:用于读取注解创建容器。

2.8 什么是Spring的依赖注入?

依赖关系的维护又称为依赖注入,这种关系交给spring来管理,当我们在类中要用到其它的类对象,都由spring来提供,我们只需要在配置文件中说明即可,依赖注入也是IOC控制反转的一种实现。

2.9 依赖注入有什么优势?

依赖注入之所以流行,是因为它是一种很可取的方式:让r容器全权负责依赖的查询,需要注入的bean对象只需要暴露出JavaBean的setter方法或者带参数的构造函数,使得容器在初始化时组装对象依赖关系。与其依赖查找方式相比,主要的优势有:

(1)查找定位操作与应用代码无关
(2)不依赖于容器的API,可以很容易地在任何容器以外使用应用对象。
(3)不需要特殊的接口,绝大多数对象可以做到完全不必依赖容器。

2.10 有哪些不同类型的依赖注入实现方式?

依赖注入是时下最流行的IOC控制反转的一种实现,实现方式有接口注入,构造器注入,setter方法注入。其中由于接口注入的灵活性太差,于是与spring4被废弃。
构造器依赖注入:构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。
Setter方法注入:Setter方法注入是容器通过调用无参构造器或无参static工厂 方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。

2.11 构造器依赖注入和Setter方法注入的区别

因为篇幅过长,答案没有展示完整,需要完整版的小伙伴-点击这里即可

Spring框架面试题总结(面试必备)相关推荐

  1. 杨校老师课堂之Spring框架面试题【开发工程师面试前必看】

    1.spring 中都用到了哪些设计模式? 2.spring 中有哪些核心模块? 3.说一下你理解的 IOC 是什么? 4.spring 中的 IOC 容器有哪些?有什么区别? 5.那 BeanFac ...

  2. 25道Spring框架面试题

    25个经典的Spring面试问答 By - Last updated: 星期二, 五月 5, 2015 本人收集了一些在大家在面试时被经常问及的关于Spring的主要问题,这些问题有可能在你下次面试时 ...

  3. 68个Spring框架面试题,含答案

    文章目录 Spring 概述 1. 什么是spring? 2. 使用Spring框架的好处是什么? 3. Spring由哪些模块组成? 4. 核心容器(应用上下文) 模块. 5. BeanFactor ...

  4. spring框架面试题有哪些?spring框架必问面试题总结

    在java面试中肯定会考框架面试题,而spring框架作为目前主流的 Java EE 轻量级开源框架必考,因此为了提高大家在java中面试概率,今天我们给大家分享一些spring框架必问面试题! 1. ...

  5. 阿里的Spring框架面试题到底有多难?这五大问题你又掌握了多少!

    还在机械地打代码?我们很多开发者在开发 Spring 的程序的时候,很多的情况下,都是被动的接受了前辈们为我们做好的 Spring 特性案例.这样以来,确实在很大的程度上减少了我们开发的成本,但是也同 ...

  6. Spring框架基础概念(面试概念解答)

    Spring框架概述 什么是Spring? 三层体系架构 Spring框架的优点 Spring的体系结构 Core Container(核心容器) Data Access/Integration(数据 ...

  7. spring框架面试题(自己学习的目的)

    问题:谈一下你对spring框架的认识 回答:框架是一种半成品,或者说一组组件,是一种不断升级的软件:具体的实现技术是应用的底层支撑,技术本身的复杂性和技术的风险性会直接对应用造成冲击,但是应用本身又 ...

  8. Spring框架面试题详解

    1. 什么是spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring 框架目标是简化Jav ...

  9. Spring 框架面试题总结

    一. 什么是Spring? 答:spring的核心是一个轻量级的容器(Container),它是实现IoC(Inversion of Control)容器和非侵入性(No intrusive)的框架, ...

最新文章

  1. 深度学习布料交换:在Keras中实现条件类比GAN
  2. linux Fedora搭建hadoop平台总结
  3. vue 项目 常用package.json
  4. 超越谷歌BERT!依图推出预训练语言理解模型ConvBERT
  5. Python 语言程序设计(1)
  6. 仿写京东商品详情页面
  7. 【2011-2012 ACM-ICPC Northeastern European Regional Contest (NEERC 11) G】GCD Guessing Game【数论思维题】
  8. Linux入门(兄弟连)
  9. java反射机制原理详解
  10. VS2019搭建C语言开发环境(图文教程)
  11. postman实现接口请求
  12. Oblog4.5跨站漏洞
  13. java中int count什么意思_int groupCount()
  14. python怎么将字母排序_请教如何用python按字母顺序排序英文名字但是不可以用sort函数...
  15. 手机计算机怎样可以整分数计算,分数计算器设计
  16. 网站可行性报告范文_鄂州编写可行性报告公司2020范文格式
  17. springboot2 集成shiro-spring-boot-web-starter
  18. 网易易盾——推理拼图验证码参数逆向分析和调用
  19. guava的String之Splitter
  20. Python语法之文件操作思维导图

热门文章

  1. 表白js特效 html爱情表白网站 html爱心代码 (1)
  2. Win32编程-头文件与函数入口
  3. 【oracle】数据字典
  4. python(3月27日)
  5. 06云计算中具有多关键字搜索的基于区块链的公钥加密
  6. HTML(html5)-----学习(基础笔记总结篇)
  7. 顶级 JavaScript 技巧
  8. logit回归模型_常见机器学习模型的假设
  9. 智能仓储行业:各细分毛利率与盈利模式分析
  10. 数据结构——顺序表的合并