1.1
何为
Spring Bean
容器
?Spring Bean
容器与
Spring IOC
容器
有什么不同吗
?
答:用于创建 bean 对象,管理 bean 对象的那个容器
Spring IOC 容器本质上指的的就是 Spring Bean 容器,
Spring Bean 容器中最核心一个机制是 IOC 机制(
控制反转),所以有时候又将 springbean 容器称之为
Spring IOC 容器.
1.2Spring IOC
如何理解
?
答:IOC 是 Spring 中提供一种控制反转机制,目的是将我们
项目中对象的依赖管理交给 Spring 实现,这样可以更好
实现对象关系的解耦,提高程序的可扩展性.
1.3Spring DI
如何理解
?
答:DI 是 Spring 中的依赖注入机制,IOC 的实现需要借助
这种机制.我们通常会这样理解,Spring Bean 容器中的
IOC 思想一种目标,DI 是实现这种思想的目标的手段.
1.4Spring
中基于注解如何配置对象作用域
?
以及如何配置延
迟加载机制
?
答:@Scope(“singleton”)
@Scope(“prototype”)
@Lazy(value=true)
1.5Spring
工厂底层构建
Bean
对象借助什么机制
?
当对象不
使用了要释放资源,目的是什么
?
何为内存泄漏
?
答:借助反射机制,防止内存泄漏,对象已经不使用了但占用着内存,这种现 象称之
为内存泄漏,内存泄漏不是内存溢出,但是它是内存溢出的一个导火索.
内存溢出直接就
导致系统崩溃了.
1.6
描述
Spring MVC
处理流程及应用优势
答:
1、客户端发出一个 http 请求给 web 服务器,web 服务器对 http 请求进 行 解析,如
果匹配前端控制器(或分发器/DispatcherServlet)的请求映射路径,
web 容器将请求
转交给 DispatcherServlet.
2、DipatcherServlet 接收到这个请求之后将根据请求的信息以及处理器映射 器
(HandlerMapping)的配置找到处理请求的处理器(Handler)。
3、由具体的处理器适配器(HandlerAdapter)对 Handler 进行具体的调用。
4 、 Handler 对 数 据 处 理 完 成 以 后 将 返 回 一 个 ModelAndView() 对 象 给
DispatcherServlet。
5、DispatcherSevlet 通过视图解析器(ViewResolver)将 ModelAndView()转
化
为真正的视图 View。
6、Dispatcher 通过 model 解析出 ModelAndView()中的参数进行解析最终展 现出完
整的 view 并返回给客户端。
1.7Spring
中的事务处理方式及优缺点
答:优点在于:
1:能够实现全局事务的控制,通过 EJB CMT 进行事物的管理。
2:能够保证项目模块在系统中完成的功能是可可控制的的操作(AOP)
缺点在于:
1:Spring 中的事物声明有编程式事物和申明是事物
1.8MyBatis
应用中
#
与
$
有什么异同点
答:
相同点:都是通过 get 来获取值的
不同点:$传进去的字符串不带引号 #号带引号
1.9MyBatis
应用动态
SQL
解决了什么问题
答:有时候,固定的 sql 语句不能够满足我们的应用需求。这个时候需要在 标准的
基础上建立动态的查询语句。
Mybatis 提供了多种注解,可以提供动态查询语言。
比如说在开发的时候,遇到这样的场景,界面提供了多种查询,但是都是非 必填写,
在选择查询条件时可以选中任意几种组合作为查询条件,如果在使 用 jdbc 的时候,需要
判断参数为空,自己组装 sql,
但是 mybatis 提供动态 sql 机制,依靠标签。
1.10
Shiro
框架权限管理时的认证和授权流程描述
.
答:Shiro 权限控制流程的原理:
应用代码 —- 调用 Subject (shiro 的 Subject 就代表当前登陆用户) 控制权
限 —- Subject 在 shiro 框架内部 调用 Shiro SecurityManager 安全管理器 —–
安全管理器调用 Realm (程序和安全数据连接器 )。
Subject 要进行任何操作,都必须要调用安全管理器(对我们来说是自动的)。
而安全管理器会调用指定的 Realms 对象,来连接安全数据。
Realms 用来编写安全代码逻辑和访问安全数据,是连接程序和安全数据的桥梁。
1.11 BeanFactory
和
ApplicationContext
有什么区别?
BeanFactory 可以理解为含有 bean 集合的工厂类。BeanFactory 包含了
种 bean 的定义,以便在接收到客户端请求时将对应的 bean 实例化。
BeanFactory 还能在实例化对象的时生成协作类之间的关系。此举将
bean 自身与 bean 客户端的配置中解放出来。BeanFactory 还包含了 bean 生命周期的控制,
调用客户端的初始化方法(initialization methods)和销毁方法(destruction methods)。
从表面上看,application context 如同 bean factory 一样具有 bean 定义、bean 关联关系
的设置,根据请求分发 bean 的功能。但 application context 在此基础上还提供了其他的
功能。
1.12
请解释
Spring Bean
的生命周期?
Spring Bean 的生命周期简单易懂。在一个 bean 实例被初始化时,
需要执行一系列的初始化操作以达到可用的状态。同样的,当一个 bean 不在被调用时需要
进行相关的析构操作,并从 bean 容器中移除。
Spring bean factory 负责管理在 spring 容器中被创建的 bean
的生命周期。Bean 的生命周期由两组回调(call back)方法组成。
初始化之后调用的回调方法。
销毁之前调用的回调方法。
Spring 框架提供了以下四种方式来管理 bean 的生命周期事件:
InitializingBean 和 DisposableBean 回调接口
针对特殊行为的其他 Aware 接口
Bean 配置文件中的 Custom init()方法和 destroy()方法
@PostConstruct 和@PreDestroy 注解方式
使用 customInit()和 customDestroy()方法管理 bean 生命周期的代码
样例如下:
1.13 Spring Bean
的作用域之间有什么区别?
Spring 容器中的 bean 可以分为 5 个范围。所有范围的名称都是自说明
的,但是为了避免混淆,还是让我们来解释一下:
singleton:这种 bean 范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只
有一个 bean 的实例,单例的模式由 bean factory 自身来维护。
prototype:原形范围与单例范围相反,为每一个 bean 请求提供一个实例。
request:在请求 bean 范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以
后,bean 会失效并被垃圾回收器回收。
Session:与请求范围类似,确保每个 session 中有一个 bean 的实例,在 session 过期后,
bean 会随之失效。
global-session:global-session 和 Portlet 应用相关。当你的应用部署在 Portlet 容器
中工作时,它包含很多 portlet。如果你想要声明让所有的 portlet 共用全局的存储变量的
话,那么这全局变量需要存储在 global-session 中。
全局作用域与 Servlet 中的 session 作用域效果相同。
1.14
在
Spring AOP
中,关注点和横切关注的区别是什么?
关注点是应用中一个模块的行为,一个关注点可能会被定义成一个我们想实现的一个功能。
横切关注点是一个关注点,此关注点是整个应用都会使用的功能,并影响整个应用,比如日
志,安全和数据传输,几乎应用的每个模块都需要的功能。因此这些都属于横切关注点。
1.15
使用
Spring
框架的好处是什么?
•
轻量:Spring 是轻量的,基本的版本大约 2MB。
•
控制反转:Spring 通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创
建或查找依赖的对象们。
•
面向切面的编程(AOP):Spring 支持面向切面的编程,并且把应用业务逻辑和系统服务
分开。
•
容器:Spring 包含并管理应用中对象的生命周期和配置。
•
MVC 框架:Spring 的 WEB 框架是个精心设计的框架,是 Web 框架的一个很好的替代品。
•
事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全
局事务(JTA)。
•
异常处理:Spring 提供方便的 API 把具体技术相关的异常(比如由 JDBC,
Hibernate or JDO 抛出的)转化为一致的 unchecked 异常。、
1.16 Spring
中用到了那些设计模式?
•
Spring 框架中使用到了大量的设计模式,下面列举了比较有代表性的:
•
代理模式—在 AOP 和 remoting 中被用的比较多。
•
单例模式—在 spring 配置文件中定义的 bean 默认为单例模式。
•
模板方法—用来解决代码重复的问题。比如. RestTemplate, JmsTemplate,
JpaTemplate。
•
工厂模式—BeanFactory 用来创建对象的实例。
•
适配器–spring aop
•
装饰器–spring data hashmapper
•
观察者– spring 时间驱动模型
•
回调–Spring ResourceLoaderAware 回调接口
1.17 Spring
如何保证
Controller
并发的安全?
Spring 多线程请求过来调用的 Controller 对象都是一个,而不是一个请求过来就创建一个
Controller 对象。
并发的安全?
原因就在于 Controller 对象是单例的,那么如果不小心在类中定义了类变
量,那么这个类变量是被所有请求共享的,这可能会造成多个请求修改该变量的值,出现与
预期结果不符合的异常
那有没有办法让 Controller 不以单例而以每次请求都重新创建的形式存在呢
?
答案是当然可以,只需要在类上添加注解@Scope(“prototype”)即可,这样每次请求调用
的类都是重新生成的(每次生成会影响效率)
虽然这样可以解决问题,但增加了时间成本,总让人不爽,还有其他方法么?答案是肯定的!
使用
ThreadLocal
来保存类变量,将类变量保存在线程的变量域中,让不同的请求隔离开来。
1.18
使用
Spring
框架的好处是什么?
轻量:Spring 是轻量的,基本的版本大约 2MB。
控制反转:Spring 通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或
查找依赖的对象们。
面向切面的编程(AOP):Spring 支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
容器:Spring 包含并管理应用中对象的生命周期和配置。
MVC 框架:Spring 的 WEB 框架是个精心设计的框架,是 Web 框架的一个很好的替代品。
事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务
(JTA)。
异常处理:Spring 提供方便的 API 把具体技术相关的异常(比如由 JDBC,Hibernate or JDO
抛出的)转化为一致的 unchecked 异常。
1.19
在
Spring
中如何注入一个
java
集合?
Spring 提供以下几种集合的配置元素:
•
类型用于注入一列值,允许有相同的值。
•
类型用于注入一组值,不允许有相同的值。
•