一、spring
1.1 介绍一下Spring***
Spring是一个轻量级的IOC和AOP容器框架,提供对持久层和物的支持。
同时它也是一个全方位的应用程序框架,能够很好的和各种框架进行整合。
(比如struts,Hibernate,mybatis)
备注:
a,轻量级:程序实现不是很复杂,代码不是很多,占用资源不是很多,没有侵入性;
b,IOC(Inversion of Control 控制反转):对象创建责任的反转(重点,核心)
把自己new的东西改为由容器提供
c, 面向横切面(AOP)编程
1.2、为何使用Spring **
Spring,使系统中用到的其它框架耦合程度大大降低,拓展性强、简单易用好管理
1.3、spring在项目中如何充当粘合剂**
1、在项目中利用spring的IOC(控制反转或依赖注入),明确地定义组件接口(如UserDAO),然后我们可以独立开发各个组件,然后根据组件间的依赖关系组装(UserAction依赖于UserService,UserService依赖于UserDAO)运行;
(2)很好的把Struts(Action)和hibernate(DAO的实现)结合起来;
2、spring的事务管理把hibernate对数据库的操作进行了事务配置
1.4、spring工作原理 **
Spring的核心就在于他的IOC(控制反转)和AOP(面向切面编程),
IOC,让一个对象的创建不用new了,交给容器去管理,可以自动的生产。
AOP也就是可以在调用的方法前后可以附加另外的行为
(1) 请解释下Spring框架中的IoC?***
(1) IOC ,Inversion of Control,就是“控制反转”,它是一中设计思想
(2) 在spring中IOC就是把对象的初始化,销毁,等工作交给spring容器来做。由spring容器来控制对象的生命周期。
(1) BeanFactory 是Spring IoC容器的具体实现,用来包装和管理各种bean。
1.6 Spring 框架中都用到了哪些设计模式?**
代理模式—AOP
单例模式—在spring配置文件中定义的bean默认为单例模式。
工厂模式—BeanFactory用来创建对象的实例。
二、springmvc
2.1 什么是spring mvc?**
springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。
springmvc是一个基于mvc的web框架。
2.2 、spring mvc的原理***
第一步:发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求HandlerMapping查找 Handler
可以根据xml配置、注解进行查找
第三步:处理器映射器HandlerMapping向前端控制器返回Handler
第四步:前端控制器调用处理器适配器去执行Handler
第五步:处理器适配器去执行Handler
第六步:Handler执行完成给适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
ModelAndView是springmvc框架的一个底层对象,包括Model和view
第八步:前端控制器请求视图解析器去进行视图解析
根据逻辑视图名解析成真正的视图(jsp)
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染
将模型数据(在ModelAndView对象中)填充到request域
第十一步:前端控制器向用户响应结果
2.3 springmvc 的异常处理
1. springmvc提供全局异常处理器(一个系统只有一个异常处理器)进行统一异常处理。
2.. 系统遇到异常,在程序中手动抛出,dao抛给service、service给controller、controller抛给前端控制器,前端控制器调用全局异常处理器。
3. springmvc提供一个HandlerExceptionResolver接口,实现这个接口,最后配置
4. springmvc.xml配置全局异常处理器
三、mybatis
mybatis是什么?
1、mybatis是一个持久层的框架,它让我们可以把主要精力放在sql上。通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要的sql语句。
2、mybatis 很方便的将查询结果集灵活映射成java对象。(输出映射)
3.2 、#{}和${}的区别
1. 他们都可以接收参数,类型可以是简单类型,pojo、hashmap。
2. #{}表示一个占位符号,${}表示一个拼接符号,会引起sql注入
#{} 为什么可以避免sql注入
#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111",
3. 如果接收简单类型,#{}中可以写成value或其它名称。${}中只能写成value。