Spring两大核心
IoC控制反转和AOP面向切面编程
什么是IoC
Spring通过IoC容器来管理对象的实例化和初始化,以及对象从创建到销毁的整个生命周期
什么是AOP(和场景)
将与业务无关的可重复的代码抽取出来,单独维护成一个切面类。并通过声明的方式,定义切面类的代码以何种方式、作用在业务切入点的哪个位置。
(场景:日志、事务等)
Spring两种IoC容器
BeanFactory 和 ApplicationContext
过滤器和拦截器的区别
SpringMVC常用注解
@Controller
@RequestMapping("/def")
@GetMapping("/getReq")
@PostMapping("/postReq")
@ResponseBody
@RequestBody
向浏览器返回字符串应该怎么设置?
@RequestMapping(value = "speak",produces = "text/html;charset=utf-8")
什么是DI依赖注入
Spring MVC 的工作流程:
1)客户端请求提交到调度器DispatcherServlet;
2)由DispatcherServlet调度器解析URL,调用URL相对应的映射处理器HandlerMapping
3)DispatcherServlet将请求提交到控制器Controller;
4)Controller调用业务逻辑(service层和dao层)处理后,向DispatcherServlet返回ModelAndView;
5)DispatcherServlet根据ModelAndView获取相对应的视图解析器ViewResolve,找到ModelAndView指定的视图view;
6)ViewResolver将数据渲染到视图;
7)dispatcherServlet调度器响应视图显示到客户端;
ModelAndView类作用:
1)存储向视图页面发送的参数,类似HttpServletRequest对象的setAttribute()方法
2)指定要请求的客户端页面名称,类似HttpServletRequest对象的请求转发
拦截器工作流程
preHandle:在控制器controller处理请求之前被调用
1 该方法的返回值是布尔值Boolean 类型的,当它返回为false 时,表示请求结束,
后续的Interceptor 和Controller 都不会再执行;
2 当返回值为true 时就会继续调用下一个Interceptor 的preHandle 方法,
如果已经是最后一个Interceptor 的时候就会是调用当前请求的Controller方法
postHandle:在controller处理请求 结束之后,在dispatcherServlet进行视图数据渲染之前,调用该方法
所以我们可以在这个方法中对Controller处理之后的ModelAndView对象进行操作
afterCompletion:在DispatcherServlet渲染完成对应的视图之后执行
这个方法的主要作用是用于进行资源清理工作
3.1 @Autowired和@Resource的区别
通过@Resource或者@Autowired注解获取bean对象
@Autowired默认按类型注入
@Resource 默认根据名称(对象名)注入(即变量名称要与容器中的实例别名一致),
当找不到与名称匹配的bean时才会按类型注入
2.2 #{}与${}的区别
#{}
是编译好SQL语句再取值,是经过预编译的,是安全的。
#{}
引用参数的时候,Mybatis会把这个参数认为是一个字符串,并自动加上单引号''
${}是取值以后再去编译SQL语句;
${}是未经过预编译的,仅仅是取变量的值,是不安全的,存在SQL注入风险;
对mybatis事务有了解吗
mybatis缓存区别
一级特征:
1 一级缓存是默认开启的;
2 一级缓存只是相对于同一个SqlSession而言;
3 在一个会话中,调用 insert、update、delete 语句时,会话中的缓存会被刷新;
二级特征:
1 二级缓存默认是关闭的;
2 二级缓存是Application(应用程序)级别的缓存;
3 二级缓存要求返回的POJO(简单java类)必须是可序列化的;