目录
5、beanFactory 和applicationcontext的区别?
6、applicationContext通常的实现有哪几种?
18、@Component、@Controller 、@Respository、 @Service有什么区别?
29、什么是AOP? AOP的实现原理
34、AOP中的concern 和cross Cutting concern的区别?
36、springAOP和aspectJ AOP有什么区别?
41、 spring dispacher Severlet 的工作流程?
1、spring的版本发展
version | 描述 |
spring2.5 | 发布于2007年,第一个支持注解的版本 |
spring3.0 | 发布于09年,利用了java5的改进,支持jee6 |
sping4.0 | 发布于13年,支持java8 |
spring5.0 | 响应式编程 |
2、什么是spring framework?
1、spring是一个开源的应用框架,旨在降低应用开发的复杂度。
2、spring是轻量级的、松散耦合
3、具有分层体系结构,允许用户自有选择组件。
4、可以继承其他框架,如hibernate,structs
5、支持pojo编程,具备持续集成和可测试性
6、核心为控制反转与依赖注入
3、spring framework有多少个模块?
3、什么是spring IOC 容器 ?
spring框架的核心是spring容器,容器创建对象,配置他们并管理他们的生命周期。spring使用依赖注入来管理组成应用程序的组件。容器通过读取配置的源数据来接收 对象进行实例化、配置
和组装的指令。配置信息可以通过xml、java注解、java代码实现
4、spring有多少种ioc容器?
beanfactory
applicationContext
5、beanFactory 和applicationcontext的区别?
beanfactory | applicationContext |
懒加载 | 即时加载 |
通过语法显式的提供资源对象 | 自己创建与管理资源对象 |
不支持国际化 | 支持国际化 |
不支持基于依赖的注解 | 支持基于注解的依赖 |
6、applicationContext通常的实现有哪几种?
1、fileSystemXmlApplicationContext
2、classPathXmlApplicationContext
3、webXmlApplicationContext
7、什么是控制反转,什么是依赖注入?
控制反转与依赖注入是同一个概念在不同角度的描述。
控制反转是指 对象生命周期的控制权 由 引用 该对象的对象 转移到 ioc 容器上。在以往的程序开发中,我们都是在对象的内部手动new的方式来创建。这样的弊端就是增加了对象间的耦合度,而Spring 控制反转 就是由ioc容器来创建和管理对象。
在依赖注入中,您不必创建对象,而是描述如何去创建对象。不是在代码中将组件与服务连接在一起,而是通过配置的方法告诉spring容器哪些组件需要哪些服务。由ioc容器进行装配。
8、依赖注入的方式有几种?
1、构造函数注入
2、setter注入
3、接口注入
9、springIOC的好处?
1、减少了应用程序中的代码量
2、使应用程序易于测试,因为他不需要单元测试中的单例或jndi查找机制
3、最小的影响和最少的侵入机制
4、支持即时的实例化和延迟加载服务
10、springIOC的实现机制?

11、什么是springbean?
1、构成用户应用程序主干的对象
2、通过springIOC容器进行实例化、配置、装配、管理
3、基于用户提供给容器的配置元数据进行创建
12、SpringBean 容器的生命周期?
1、spring容器根据配置中的bean定义 实例化bean
2、spring使用依赖注入填充bean中的所有属性
3、如果bean实现了beanNameAware接口,工厂通过传递bean的id来调用setBeanName
4、如果bean实现了beanFactoryWare接口,工厂通过调用自身的setBeanFactory
5、如果存在任何与bean相关的beanPostProcessors,则调用preProcessBeforeInitialization()方法
6、如果bean指定了init方法,则调用它
7、如果存在任何与bean相关的beanPostProcessor,则调用postProcessAfterInitialization()方法
8、如果bean实现了disPosableBean接口,则容器关闭时调用destory
9、如果bean指定了destroy接口,则调用它。
13、SpringBean Scope有多少种级别?
1、singleton : 每个springIOC容器仅有一个单实例
2、protoType : 每次请求都会产生一个新的实例
3、Request : 每次http请求都会产生一个新的实例,且该实例仅在当前http请求有效
4、Session : 每次http请求都会产生一个新的实例,且该实例尽在当前http session内有效
5、Global Session : 类似于标准的http session,尽在基于portlet的web应用有意义
14、Spring自动装配有几种模式?
1、no : 默认不开启,只能通过显式配置
2、byName :根据bean的名称注入对象依赖项
3、byType :根据类型注入对象依赖项
4、构造函数: 通过调用类的构造函数来注入对象依赖项
5、autoDetect :首先容器通过构建函数使用Autowire来装配,如果不行,在使用byType
15、自动装配有什么局限?
1、被覆盖的可能性
2、基本元数据类型无法自动装配
3、自动装配不太明确
16、基于注解的装配是什么?
17、 如何在spring中启动注解装配?
默认情况下,spring不启动注解装配。
若要启动,需要在spring配置文件中配置
<context :annotation-config/>
18、@Component、@Controller 、@Respository、 @Service有什么区别?
1、@Component : 将java类标记为bean,这是任何spring管理组件的通用构造型
2、@Service : 功能与component一样,名字不同,更好表示使用场景
3、@Controller : 将类标记为spring webMVC的控制器,能够直接被springIOC容器导入
4、@Respository : 与Component相似,能够将DAO导入IOC容器,使未检查的异常有资格转化为
spring DataAcessException
19、@Required注解有什么作用?
此注解应用于bean属性的setter方法,用于指明必须在配置时使用 bean定义中的显示属性值或使用自动装配受影响的bean属性,否则容器将抛出 BeanInitializationException
20、@Autowire 有什么作用?
@Autowire可以更准确的控制应该在何处,以何种方式注入bean.可以用在setter方法,构造函数、属性、成员方法上。默认情况下,他是类型驱动的注入
21、 @Qualifier 注解有什么用?
当你创建多个相同类型的bean,并且希望仅使用属性装配其中一个bean时,您可以通过@Autowire和@Qualifier来指定装配 哪个确切的bean来消除歧义。
22、@RequestMapping 有什么用?
@requestMapping用于将特定http请求映射到处理相应请求的控制器的类或方法上。
23、springDAO有什么用?
springDAO使的jdbc、hibernate、jdo等数据访问技术能够以一种统一的方式工作。
使得用户能够容易的在持久性技术之前切换。
无需考虑捕获每种技术不同的异常。
24、springJDBC API中存在哪些类?
jdbcTemplate
SImpleJdbcTemplate
NamedParameterJdbcTemplate
SimpleJdbcInsert
SimpleJdbcCall
25、列举spring支持的事务管理类型?
程序化事务管理
声明式事务管理
26、spring框架的事务管理有哪些优点?
1、为不同的事务api提供了统一的编程模式,如hibernate、jpa、jdo
2、为编程式事务管理提供了一套简单的api
3、支持声明式事务管理
4、和spring数据访问抽象层很好的集成。
27、Spring支持哪些ORM框架
hibernate 、ibatis、 jpa、jdo 、ojb
28、解释spring的对象关系映射集成模块?
spring通过提供orm框架,支持在jdbc之上使用orm工具,spring支持主流的orm框架,如hibernateJdo,ibatis maps
29、什么是AOP ? spring AOP的实现原理是什么?
aop,即面向切面编程,他与oop相辅相成,提供了与oop不同的抽象软件结构的视角。
在oop中,我们以类作为我们的基本单元。
aop中,以界面作为基本单元。
aop的底层是通过动态代理实现的。
动态代理有两种,1、jdk动态代理 2、cglib动态代理
jdk的动态代理是基于接口的,因此要使用它,目标类必须实现接口。
cglib动态代理是继承目标类实现的,因此目标类不能用final修饰,因为被final修饰的类无法被继承。
30、什么是Aspect?
切面Aspect由切点pointcut和通知advice组成。它既包含了横切逻辑的定义,也包含了连接点的定义。Spring aop 是负责实现切面的框架。将切面定义的横切逻辑编织到指定的连接点。 它的工作重心在于如何将增强编织到目标对象的连接点上, 包含两部分:1、如何利用切点和通知 定位到特定的连接点 2、如何在通知中编写横切代码
31、什么是切点?pointcut
程序运行中的一些时间点,例如一个方法的指定或者一个异常的处理
32、什么是通知?advice
在指定连接点处切面所采取的行动。spring aop使用一个通知作为拦截器。在连接点的周围维护一系列的拦截器。
33、有几种类型的通知?
5种
Before: 连接点方法执行之前
After: 连接点方法执行之后(无论该方法正常执行还是执行异常)
Around: 连接点方法执行之前和之后
AfterReturning : 连接点方法正常执行之后
AfterThrowing : 连接点方法 执行异常之后
34、AOP中的concern 和cross Cutting concern的区别?
concern是在应用中特定模块所定义的行为
crosscuttingconcern是在整个应用适用的行为
35、AOP有哪些实现方式?
1、动态代理 :springAOP
2、静态代理: aspectJ
36、springAOP和aspectJ AOP有什么区别?
springAOP是基于动态代理的,aspectJ 是基于静态代理的。
springAOP仅支持方法级别的切点。aspectJ除方法级别外,还支持属性级别的切点。
37、如何理解spring中的代理?
将advice插入目标对象创建的对象称为代理。对于客户端对象来说,目标对象与代理对象是相同的。
38、有几种不同的代理?
beanNameAutoProxyCreator
defaultAdviceAutoProxyCreator
metaData Auto Proxying
39、什么是编织?
为了创建一个advice对象而链接一个切面和其他应用类型或对象,称为编织。在springAOP中,编织发生在运行时。
40、springMVC框架有什么用?
springMVC框架提供了模型-视图-控制器的架构和随时可用的组件,用于开发灵活且松散耦合的web应用程序。mvc架构有助于分离应用程序的不同方面,控制逻辑,业务逻辑,UI逻辑,同时在所有这些元素之间提供松散耦合。
41、 spring dispacher Severlet 的工作流程?
1、客户端向服务端发送http请求。
2、请求被dispacher severlet 截获,根据severlet.xml中的配置将请求中url解析成资源标识符uri,
3、handerMapping根据uri获取指定的hander返回给dispacherseverlet,dispacher servlet根据hander选择合适handerAdapter
4、找到、填充参数并执行指定的hander(controller).
5、指定完后返回一个modelandview对象给dispacher severlet
6、modelandview 加上viewResolver一起渲染视图
7、视图将渲染结果返回客户端
42、介绍一下WebApplicationContext?
WebApplicationContext 是ApplicationContext的扩展,它具有web应用程序所具有的一些额外功能。在解析主题和决定与哪个servlet关联的能力上与applicationcontext不同。
43、SpringMVC是什么?
springMVC是mvc的一个开源框架,springMVC= structs2+spring, springMVC是spring的子模块,在spring的基础上,提供了web应用的mvc模块
44、springMVC是怎样设定重定向与转发的?
45、springMVC常用的注解有哪些?
requestMapping
requestBody
responseBody
46、Spring框架中都用到了哪些设计模式?
1、工厂模式: beanFactory就是简单工厂模式
2、单例模式: 默认创建的bean就是单例模式
3、代理模式: springAOP 用到jdk动态代理 及cglib的字节码生成技术
4、模板方法模式:restTempplate
5、观察者模式:applicationListener
47、spring中的单例bean是线程安全的吗?
不是线程安全的
48、你可以在spring中注入null和空字符串吗?
可以
49、spring的三级缓存是如何解决循环依赖的?
Spring 为什么要用三级缓存来解决循环依赖(AOP),二级缓存不行吗_二级缓存能不能解决循环依赖-优快云博客
有几种情况,spring三级缓存是无法解决的?
- prototype 类型的循环依赖 (多实例)
- constructor 注入的循环依赖 (构造器注入,三级缓存只针对属性注入)
- @Async 类型的 Bean 的循环依赖
这三种情况可以通过@Lazy注解来解决