1.何为Spring Bean容器?Spring Bean容器与Spring IOC容器有什么不同吗?
用于创建bean对象,管理bean对象的那个容器Spring IOC容器本质上指的是Spring Bean容器,核心机制就是IOC机制(控制反转),所以有时候又将Spring Bean容器称为Spring IOC容器。
2.Spring IOC如何理解?
IOC是Spring中的一种控制反转机制,目的:将项中对象的依赖管理交给Spring管理,实现对象管理的解耦,提高程序的可扩展性。
3.Spring DI如何理解?
DI是spring的依赖注入机制,IOC的实现需要这种机制,IOC思想是一种目标,DI是实现目标的手段。
4.Spring中基于注解如何配置对象作用域?以及如何配置延迟加载机制?
1.配置作用域需要注解@Scope(“Singleton”)
-
单例(Singleton):在整个应用中,只创建 Bean 的一个实例。 -
原型(Prototype):每次注入或者通过 Spring 应用上下文获取的时候,都会创建一个新的 Bean 实例。 -
会话(Session): 在 Web 应用中,为每个会话创建一个 Bean 实例。 -
请求(Request):在 Web 应用中,为每个请求创建一个 Bean 实例。
2.开启延迟加载:@Lazy(value=true)
5.Spring工厂底层构建Bean对象借助什么机制?当对象不使用要释放资源,目的是什么?何为内存泄漏?
1.借助反射机制,防止内存泄漏。
2.不使用释放资源防止内存泄漏。
3.对象不再使用但占着内部,为内存泄漏。
6.描述Spring MVC处理流程及应用优势
1.用户发送请求至前端控制器(DispatcherServlet);
提示:DispatcherServlet的作用:接收请求,调用其它组件处理请求,响应结果,相当于转发器、中央处理器,是整个流程控制的中心。
2.前端控制器(DispatcherServlet)收到请求后调用处理器映射器(HandlerMapping),处理器映射器(HandlerMapping)找到具体的Controller返回给前端控制器;
3.前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter);
4.前端控制器(DispatcherServlet)将执行的结果(ModelAndView)传给视图解析器(ViewReslover),
视图解析器(ViewReslover)根据View(逻辑视图名)解析后返回具体JSP页面;
5.前端控制器(DispatcherServlet)根据Model对View进行渲染(即将模型数据填充至视图中),
前端控制器(DispatcherServlet)将填充了数据的网页响应给用户;
7.Mybatis应用中#与$有什么异同点?
相同点:都是通过get来取值的;
不同点:$传过去的字符串不带引号,#号带引号;
8.Mybatis应用动态SQL解决了什么问题?
提供多种注解,可以提供动态查询语句,
9.Shiro框架权限管理时的认证和授权流程描述
应用代码->调用Subject(登录用户)控制权限->Subject在shiro内部调用SecurityManager(安全管理器)->安全管理器调用Realm(程序和安全数据连接器,连接后台数据库)
10.请解释Spring Bean的生命周期
11.Spring Bean的作用域之间的区别
12.在Spring AOP中,关注点和横切关注的区别是什么
**AOP:**这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
关注点是应用中一个模块的行为,一个关注点可能会被定义成一个我们想实现的一个功能。
横切关注点是一个关注点,此关注点是整个应用都会使用的功能,并影响整个应用,比如日志,安全和数据传输,几乎应用的每个模块都需要的功能。因此这些都属于横切关注点。
13.使用Spring框架的好处
- 轻量:Spring是轻量的,基本版本大约2MB
- 控制反转:把创建对象全权交给Spring管理
- 面向切面的编程(AOP):把应用业务逻辑和系统服务分开
- 容器:管理应用中对象的生命周期和配置
- MVC框架:是web框架的一个很好的替代品
- 事务管理:被视为单一的工作单元的操作序列。这些操作应该要么完整地执行,要么完全不执行
- 异常管理:提供方便的API把具体技术相关的异常
14.Spring 中用到了那些设计模式?
- 代理模式—在AOP和remoting中被用的比较多。
- 单例模式—在spring配置文件中定义的bean默认为单例模式。
- 模板方法—用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。
- 工厂模式—BeanFactory用来创建对象的实例。
- 适配器–spring aop
- 装饰器–spring data hashmapper
- 观察者– spring 时间驱动模型
- 回调–Spring ResourceLoaderAware回调接口
15.在Spring中如何注入一个java集合
- list类型用于注入一列值,允许有相同的值。
- set 类型用于注入一组值,不允许有相同的值。
- map类型用于注入一组键值对,键和值都可以为任意类型。
- props类型用于注入一组键值对,键和值都只能为String类型
16.Spring支持的事务管理类型
- 编程式事务管理:这意味着你可以通过编程的方式管理事务,这种方式带来了很大的灵活性,但很难维护。
- 声明式事务管理:这种方式意味着你可以将事务管理和业务代码分离。你只需要通过注解或者XML配置管理事务。
17.Spring MVC的主要组件?
1.前端控制器 DispatcherServlet
2.处理器映射器HandlerMapping
3.处理器适配器HandlerAdapter
4.处理器Handler
5.视图解析器 ViewResolver
6.视图View
18.Mybatis中#和$的区别
- #{}是预编译处理,${}是字符串替换。
- Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
- Mybatis在处理{}替换成变量的值,相当于字符串拼接;
- 使用#{}可以有效的防止SQL注入,提高系统安全性。
19.Mybatis的缓存机制,一级,二级介绍一下
1.一级缓存
-
默认开启
-
SqlSession级别的缓存,实现在同一个会话中数据的共享
-
一级缓存的生命周期和SqlSession一致
-
当有多个SqlSession或者分布式环境下,数据库写操作会引起脏数据。
2.二级缓存 -
默认不开启,需手动开启
-
SqlSessionFactory级别的缓存,实现不同会话中数据的共享,是一个全局变量;
-
可自定义存储源,如Ehcache;
-
当开启缓存后,数据查询的执行的流程是:二级缓存>一级缓存>数据库;
-
不同于一级缓存,二级缓存可设置是否允许刷新和刷新频率实现;
20.SpringMVC和Struts2的区别
- Springmvc的入口是一个servlet即前端控制器,基于方法开发;
- struts2入口是一个filter过虑器,基于类开发;
21.Mybatis的基本工作流程
1.读取配置文件,配置文件包含数据库连接信息和Mapper映射文件或者Mapper包路径。
2.有了这些信息就能创建SqlSessionFactory,SqlSessionFactory的生命周期是程序级,程序运行的时候建立起来,程序结束的时候消亡
3.SqlSessionFactory建立SqlSession,目的执行sql语句,SqlSession是过程级,一个方法中建立,方法结束应该关闭
4.当用户使用mapper.xml文件中配置的的方法时,mybatis首先会解析sql动态标签为对应数据库sql语句的形式,并将其封装进MapperStatement对象,然后通过executor将sql注入数据库执行,并返回结果。
5.将返回的结果通过映射,包装成java对象。
总结:
- 创建SqlSessionFactory
- 通过SqlSessionFactory创建SqlSession
- 通过SqlSession执行数据库操作
- 调用session.commit()提交事务
- 调用session.close()关闭事务
22.使用MyBatis的mapper接口调用时有哪些要求?
Mapper接口方法名和mapper.xml中定义的每个sql的id相同
Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
Mapper.xml文件中的namespace即是mapper接口的类路径