面试篇二:MyBatis、Spring、SpringMVC

  • 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。

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

  • SpringMVC
  • SpringMVC工作流程
  • SpringMVC常用注解

 

猜你喜欢

转载自www.cnblogs.com/scorpio-cat/p/12818869.html
今日推荐