面试官常问的 web后台 问题 31-40
31、讲一讲你对 AOP 和 IOC 的理解
IOC:控制反转,依赖注入,把对对象的操作转到spring容器中执行,直接注解;
AOP:面向切面编程,拦截器,项目的事务、日志都体现了AOP;
IOC:Invert of control,控制反转,也称为 DI,依赖注入。
依赖对象的创建和维护交给了 spring 容器来管理,应用程序本身
不需要负责依赖对象的创建和维护,简单理解就是把原本应该我们去 new 对象这个操作转到 spring 容器中执行,直接注解。
AOP:面向切面编程,本质就是拦截器。
项目中的事务和日志就是很好的体现了 AOP。
比如:操作数据库的增删改之前,都需要开启事务,增删改之后,都需要提交事务,这样我们就可以写一个拦截器,底层就是采用动态代理实现前置通知和后置通知,在前置通知中开启事务,在后置通知中提交事务,在 spring.xml 中配置通知即可,spring 的事务管理底层就用到了 AOP;
32、Spring 的注入方式有哪些
setter注入、构造注入、接口注入
①. setter 注入:对于习惯了传统的 JavaBean 开发的程序员来说,通过 setter 方法注入属性值是熟悉的、直观的和自然的。
如果依赖关系比较复杂,那么构造方法注入方式会导致构造方法相当庞大,此时使用设值方式更为简洁
②. 构造注入:构造方法注入很好的响应了 Java 设计原则之一,在构造期间即可创建一个完整、合法的对象;避免了繁琐的
setter 方法的编写,所有的依赖关系均在构造方法中设定,依赖关系集中体现;
③. 接口注入:接口注入因具备侵入性,它要求组件必须与特定的接口相关联,因此这种注入方式基本上已经被遗弃了。
33、可以在 spring 中注入 null 或者空字符串吗?
可以在spring中注入null或空字符串。
注入 null 值
<property name=”email”><null/></property>
注入空字符串:
<property name=”email” value=””></property>
34、Spring 通知有哪些类型?
前置通知、后置通知、环绕通知、异常通知、过滤通知
(1)前置通知(Before advice):在某连接点(join point)之前执行的通知,但这个通知不能阻止连接点前的执行(除非它
抛出一个异常)。
(2)后置通知(After (finally) advice):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。
(3)环绕通知(Around Advice):包围一个连接点(join point)的通知,如方法调用。这是最强大的一种通知类型。 环绕
通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执
行。 环绕通知是最常用的一种通知类型。大部分基于拦截的 AOP 框架,例如 Nanning 和 JBoss4,都只提供环绕通知。
35、SpringMVC 的工作流程
①. SpringMVC 将所有的请求都提交给 DispatcherServlet
②. DispatcherServlet 收到请求调用 HandlerMapping 处理映射器
③. 处理映射器找到具体的处理器,生成处理器对象返回给 DispatcherServlet
④. DispatcherServlet 调用 HandlerAdapter 处理器适配器
⑤. HandlerAdapter 经过适配调用具体的处理器 Controller
⑥. Controller 进行业务逻辑处理后,会返回一个 ModelAndView
⑦. HandlerAdapter 将 Controller 执行结果 ModelAndView 返回给 DispatcherServlet
⑧. DispatcherServlet 将 ModelAndView 传给 ViewResolver 视图解析器
⑨. ViewResolver 解析后返回具体的 View
⑩. DispatcherServlet 根据 View 进行渲染视图并响应用户
36、springmvc 怎么防止 SQL 注入
使用拦截器
使用 SpringMVC 的拦截器实现防止 SQL 注入
37、springmvc 常用注解
@RequestMapping: 是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
@PathVariable: 用于将请求 URL 中的模板变量映射到功能处理方法的参数上,即取出 uri 模板中的变量作为参数。
@requestParam : 主 要 用 于 在 SpringMVC 后 台 控 制 层 获 取 参 数 ,
类 似 一 种 是request.getParameter(“name”),它有三个常用参数:defaultValue = “0”, required = false, value = “isApp”;
defaultValue表示设置默认值,required 通过 boolean 设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。
@ResponseBody : 该 注 解 用 于 将 Controller 的 方 法 返 回 的 对 象 , 通 过 适 当 的 HttpMessageConverter 转换
为指定格式后,写入到 Response 对象的 body 数据区。
使用时机:返回的数据不是 html 标签的页面,而是其他某种格式的数据时(如 json、xml 等)
使用 @RequestBody : 该 注 解 常 用 来 处 理 Content-Type: 不 是 application/x-www-form-urlencoded编码的内容,例如 application/json, application/xml 等;
@RequestHeader : 可以把 Request 请求 header 部分的值绑定到方法的参数上。
@CookieValue :可以把 Request header 中关于 cookie 的值绑定到方法的参数上。
38、SpringMVC 怎么样设定重定向和转发的?
转发在返回前加 forward,重定向在返回值前加 redirect
(1)转发:在返回值前面加"forward:",比如:“forward:user.do?name=method4”
(2)重定向:在返回值前面加"redirect:",比如:“redirect:http://www.baidu.com”
39、SpringMvc 怎么和 AJAX 相互调用的?
通过 Jackson 框架就可以把 Java 里面的对象直接转化成 Js 可以识别的 Json 对象。具体步骤如下 :
(1)加入 Jackson.jar
(2)在配置文件中配置 json 的映射
(3)在接受 Ajax 方法里面可以直接返回 Object,List 等,但方法前面要加上@ResponseBody 注解。
40、SpingMvc 中的控制器的注解一般用那个,有没有别的注解可以替代?
用@Controller注解,可使用@RestController
一般用@Controller 注解,也可以使用@RestController,@RestController 注解相当于@ResponseBody + @Controller,表示是
表现层,除此之外,一般不用别的注解代替。