java面试题---spring 框架相关

目录

1、spring的版本发展

2、什么是spring framework?

3、spring framework有多少个模块?

 3、什么是spring IOC 容器 ?

4、spring有多少种ioc容器?

5、beanFactory 和applicationcontext的区别?

6、applicationContext通常的实现有哪几种?

7、什么是控制反转,什么是依赖注入?

8、依赖注入的方式有几种?

9、springIOC的好处?

10、springIOC的实现机制?

11、什么是springbean?

12、SpringBean 容器的生命周期?

13、SpringBean Scope有多少种级别?

14、Spring自动装配有几种模式?

15、自动装配有什么局限?

16、基于注解的装配是什么?

17、 如何在spring中启动注解装配?

18、@Component、@Controller 、@Respository、 @Service有什么区别?

19、@Required注解有什么作用?

20、@Autowire 有什么作用?

21、 @Qualifier 注解有什么用?

22、@RequestMapping 有什么用?

23、springDAO有什么用?

24、springJDBC API中存在哪些类?

25、列举spring支持的事务管理类型?

26、spring框架的事务管理有哪些优点?

27、Spring支持哪些ORM框架

28、解释spring的对象关系映射集成模块?

29、什么是AOP? AOP的实现原理

30、什么是Aspect?

31、什么是切点?pointcut

32、什么是通知?advice

33、有几种类型的通知?

34、AOP中的concern 和cross Cutting concern的区别?

35、AOP有哪些实现方式?

36、springAOP和aspectJ AOP有什么区别?

37、如何理解spring中的代理?

38、有几种不同的代理?

39、什么是编织?

40、springMVC框架有什么用?

41、 spring dispacher Severlet 的工作流程?

42、介绍一下WebApplicationContext?

43、SpringMVC是什么?

44、springMVC是怎样设定重定向与转发的?

45、springMVC常用的注解有哪些?

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

47、spring中的单例bean是线程安全的吗?

48、你可以在spring中注入null和空字符串吗?

49、spring的三级缓存是如何解决循环依赖的?


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的区别?

beanfactoryapplicationContext
懒加载即时加载
通过语法显式的提供资源对象自己创建与管理资源对象
不支持国际化支持国际化
不支持基于依赖的注解支持基于注解的依赖

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的实现机制?

Spring 中的 IoC 的实现原理就是工厂模式加反射机制。
示例:

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是怎样设定重定向与转发的?

1 )转发:在返回值前面加 "forward:" ,譬如 "forward:user.do?name=method4
2 )重定向:在返回值前面加 "redirect:" ,譬如 "redirect: http://www.baidu.com "

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三级缓存是无法解决的?

  1. prototype 类型的循环依赖      (多实例)
  2. constructor 注入的循环依赖    (构造器注入,三级缓存只针对属性注入)
  3. @Async 类型的 Bean 的循环依赖 

这三种情况可以通过@Lazy注解来解决

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值