码迷,mamicode.com
首页 > 编程语言 > 详细

面试篇二:MyBatis、Spring、SpringMVC

时间:2020-05-02 18:42:58      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:glib   配置   poi   cglib   class   字符串   jdk 动态代理   调用   sage   

  • Mybatis
  • Mybatis中#{}和${}区别

#{}:解析为参数占位符,生成的SQL里对应的位置用?表示,值是当做字符串处理的,会加上‘‘。

使用#{}可以很大程度上防止sql注入(SQL拼接)。

 

${}:直接解析为相应的值。在动态生成SQL时,直接进行变量替换,不会自动加‘‘。

在动态表名和order by动态字段时,需使用${}。

#{}因为是替换成?,在初始化阶段就会生成SQL。${}是未知的,在初始化阶段不处理。

  • Mybatis为什么只定义了接口,就可以执行SQL了

是通过JDK动态代理实现的。

  • Spring
  • Spring IOC和AOP

IOC,控制反转(Inversion of Control),就是把对象的创建(即bean的new操作),交给Spring来实现。

DI,依赖注入(Dependency Injection),是spring IOC的具体实现,做的工作是Spring实例化bean对象后,对bean对象的属性信息进行赋值的操作。

AOP,面向切面编程(Aspect Oriented Programming),是一种编程范式,是OOP(面向对象编程)的延续,采用横向抽取机制,补充了OOP纵向继承体系无法解决的重复代码优化方式。

简单地说就是在不改变原程序的基础上为代码段增加新功能,对代码段进行增强处理。

譬如,假设有A,B有相同的逻辑,我们可以横向抽取相同的部分出来,通过AOP思想和业务串联起来,同时这是可插拔式的。

AOP思想的实现一般都是基于代理模式,给业务代码进行功能增强,将业务代码和系统代码解耦。

如果目标对象的实现类实现了接口,Spring AOP 将会采用 JDK 动态代理来生成 AOP 代理类;

如果目标对象的实现类没有实现接口,Spring AOP 将会采用 CGLIB 来生成 AOP 代理类。

增强方式:五种,分别为前置增强、后置增强、最终增强、异常增强、环绕增强。

https://www.cnblogs.com/scorpio-cat/p/12632063.html

  • Spring 常用注解

(1)作用于属性上:

@Autowired:byType注入。

@Qualifier:对于同一接口有多个实现类时,需@Autowired+@Qualifier组合使用,byName注入。

@InJect:byType注入,可以通过@Qualifier显式指定byName注入。

@Resource:按byName注入。

(2)作用于类上

@Controller @Service @Respository @Compent:分别表示该类为控制层、业务层、持久层、比较中立的类,被Spring管理。

@ComponentScan:指定需扫描的包。

(3)作用于方法上

@Bean:一般用于导入第三方组件的类,如DataSource。

(4)AOP常用注解

作用于类上

@Aspect

作用于方法上

@Pointcut

@Before:前置增强。

@After:后置增强。

@AfterRetruning:最终增强,在方法返回之前,获取返回值并进行记录操作。

@Around:环绕执行,@Before和@AfterRetruning的结合体。

@AfterThrowing:异常增强,在异常抛出前进行处理。

https://www.cnblogs.com/scorpio-cat/p/12719342.html

  • SpringMVC
  • SpringMVC工作流程

(1)用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;

(2)DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;

(3)DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(…)方法)

(4)提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作: HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息; 数据转换:对请求消息进行数据转换。如String转换成Integer、Double等; 数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等; 数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中;

(5)Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;

(6)根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;

(7)ViewResolver 结合Model和View,来渲染视图;

(8)将渲染结果返回给客户端。

  • SpringMVC常用注解

 

面试篇二:MyBatis、Spring、SpringMVC

标签:glib   配置   poi   cglib   class   字符串   jdk 动态代理   调用   sage   

原文地址:https://www.cnblogs.com/scorpio-cat/p/12818869.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!