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方法注入的区别

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