什么是Spring MVC?简单介绍下你对Spring MVC的理解?
基于mvc架构中的web框架,将web层进行解耦,绑定参数、调用service、响应结果
Spring MVC的优点
支持各种视图技术,不仅仅只是jsp;与spring框架集成;清晰的角色分配
组件
Spring MVC的主要组件?
dispatcherservlet、handlerMapping、HandlerAdapter、Handler(开发)、ViewResolver、View(开发)
什么是DispatcherServlet
springMvc围绕DispatcherServlet进行设计的,用来分发和响应请求
Spring MVC的控制器是不是单例模式,如果是,有什么问题,怎么解决?
是单例的,如果处理同一个变量,会造成数据不一致。不在控制器里面写变量
工作原理
请描述Spring MVC的工作流程?描述一下 DispatcherServlet 的工作流程?
用户发起请求,先到dispatchservlet,进行分发到handlerMapping进行映射响应(处理器对象和处理器拦截器)给dispatservlet,在调用handlerAdapter适配到对应的处理器返回ModelAndView;再到ViewResovler进行视图解析最后将渲染视图返回给用户
常用注解
注解原理是什么
Spring MVC常用的注解有哪些?
@Controller、@RequestMapping、@responseBody、@requestBody、@pathVariable、@requestparam
SpingMvc中的控制器的注解一般用哪个,有没有别的注解可以替代?
@restController=@Controller、@responseBody
@Controller注解的作用:定义了控制器类
@RequestMapping注解的作用:
@ResponseBody注解的作用
@PathVariable和@RequestParam的区别
其他
Spring MVC的异常处理?
如果在拦截请求中,我想拦截get方式提交的方法,怎么配置
Spring MVC里面拦截器是怎么写的
什么是spring?
spring春天,为了简化javaweb企业级开发,提供一个轻量级框架。IOC、Aop
Spring的优缺点是什么?
缺点:依赖反射,影响性能;有一定的入门门槛;轻量级框架但是给人感觉大而全。
Spring由哪些模块组成?
Data、web
Aop、aspect
beans(对Bean的创建、管理、配置以及包含进行IOC/DI需要的类。)、core(Core组件是Spring所有组件的核心)、context(它使Spring成为一个容器。)
test
Beans组件和Context组件是实现IOC和DI的基础
Spring 框架中都用到了哪些设计模式?
工厂(beanFactory)、单例(bean就是默认单例)、代理(Aop)、模板(jdbcTemplate)
什么是Spring IOC 容器?
控制反转,由IOC来管理对象,实现是靠DI依赖注入
控制反转(IoC)有什么作用
IOC的优点是什么?
Spring IoC 的实现机制
工厂模式+反射
BeanFactory 和 ApplicationContext有什么区别?
beanFactory:懒加载
ApplicationContext:一次性加载
Spring 如何设计容器的,BeanFactory和ApplicationContext的关系详解(它们都是容器)
core模块:beanFactory就是一个map,key是beanName,value是Bean的实例。是个低级容器
context模块:ApplicationContext是继承了beanFactory,其中还继承了其它接口,包含了多个方法,是个高级容器
ApplicationContext通常的实现是什么?
ClassPathXmlApplicationContext、WebXmlApplicationContext、FileSystemXmlApplicationContext
构造器依赖注入和 Setter方法注入的区别
构造器依赖注入:调用有参构造方法
Setter方法注入:调用无参,然后调用set方法
什么是Spring beans?
spring beans是java对象, 通过容器中配置的元数据进行创建(但java对象不一定是一个bean)
如何给Spring 容器提供配置元数据?Spring有几种配置方式
xml配置、注解配置、基于java配置
Spring基于xml注入bean的几种方式
set注入、构造器注入、静态工厂、实例工厂
解释Spring支持的几种bean的作用域
singleton(默认)、prototype、request、session、
Spring框架中的单例bean是线程安全的吗?
单例的不安全。当bean有状态时(可以保存数据),多个线程一起操作会存在安全问题(Spring提供ThreadLocal解决)
Spring如何处理线程并发问题?
Spring提供ThreadLocal解决,会为每一个线程提供一个独立的变量副本来解决访问冲突
解释Spring框架中bean的生命周期
1、实例化
2、赋值、调用BeanNameAware方法setBeanName、BeanFactoryAware方法setBeanFactory、ApplicationContextAware的setApplicationContext方法
3、BeanPostProcess的预初始化方法、InitializingBean的afterPropertiesSet方法、自定义初始化、BeanpostProcess的初始化后方法
(初始化后可以使用)
4、销毁
哪些是重要的bean生命周期方法? 你能重载它们吗?
bean 标签有两个重要的属性(init-method和destroy-method
什么是bean的自动装配?
不需要配置容器,spring能自动装配bean之间的依赖
解释不同方式的自动装配,spring 自动装配 bean 有哪些方式?
no、byName、byType、constructor、autodetect
使用@Autowired注解自动装配的过程是怎样的?
通过byType匹配,有大于两个的实现类话可以和qualifier配合使用,通过byName匹配
自动装配有哪些局限性?
自动装配跟直接装配(explicit wiring)相比较,在准确性方便还是差那么点
怎样开启注解装配?
在Spring配置文件中配置 context:annotation-config/元素。
@Component, @Controller, @Repository, @Service 有何区别?
@Component将 java 类标记为 bean
@Required 注解有什么作用
该属性需要赋值
@Autowired和@Resource之间的区别
@Autowires自动注入,通过Bytype,与@Qualifier配合使用
@Resource通过Byname
Spring支持的事务管理类型, spring 事务实现方式有哪些?
编程式事务、声明式事务
声明式事务管理粒度只能控制到方法,不能像编程式事务控制代码块级别
Spring事务的实现方式和实现原理
本质就是数据库对事务的支持
说一下Spring的事务传播行为
propagation_Required 存在事务就用,不存在事务就创建事务,常用设置
propagation_supports 存在事务就用,不存在就不用
propagation_mandatory 存在事务就用,不存在就抛出异常
propagation_Required_New创建新事务
propagation_not_supports不用事务,如果有则挂起
propagation_never 不用事务,如果有则抛出异常
propagation_nested 存在就嵌套使用事务,没有事务按照required属性执行
说一下 spring 的事务隔离?
未提交读、提交读、可重复读、序列化
脏读、不可重复读、幻读
Spring框架的事务管理有哪些优点?
支持声明式事务、为不同的事务API提供一样的编程模式
什么是AOP
面向切面编程,将一些不影响业务的公共模块提取出来,这些模块就叫切面。比如日志记录、权限认证、事务处理。
减少重复代码、松耦合、提高可维护性
JDK动态代理和CGLIB动态代理的区别
JDK动态代理是针对实现接口的类生成代理
CGLIB动态代理是针对类实现代理
如何理解 Spring 中的代理?
Advice + Target Object = Proxy
通知 + 目标对象=代理
解释一下Spring AOP里面的几个名词
连接点:spring允许通知的地方
切入点:选择特定的连接点
通知:切面的工作
切面:通知+切入点
Spring通知有哪些类型?
环绕通知
前置通知
方法执行
环绕通知
后置通知
返回通知(异常通知)
spring中文春天,是个轻量级框架,未了解决javaweb企业级开发而生,从几个模块来进行一个介绍,
beans模块中的bean是一个对象,但是对象不一定是bean,通过配置的一些元数据进行创建,其中beans模块定义了一些创建管理bean的方法;
core模块是核心模块,是所有组件的核心;context模块是上下文模块,在beans、core模块之上进行了构建,和beans模块一起组成了一个spring比较重要的特性IOC;
AOP模块面向切面编程,也是spring比较重要的特性之一,可以用于日志记录、权限控制、事务等;
Data模块,其中包含了jdbc、jpa、事务等,持久层框架我比较熟悉的是mybatis;Web模块,包含了servlet、web,在Web层我比较熟悉的是SpringMVC
MyBatis是什么?
是一个持久层框架,是一个半ORM框架(对象关系的映射,需要自己手动编写sql)
Mybatis优缺点
优点:提供标签映射、与spring集成、消除了大量代码
缺点:sql语句编写量大、数据库移植性差
MyBatis的解析和运行原理
MyBatis编程步骤是什么样的?
创建sqlsessionFactory、在创建sqlsesion、执行数据库操作、commit、close
请说说MyBatis的工作原理
读取mybatis配置文件、读取mapper.xml文件、创建sqlsessionFactory、创建sqlsession、Executor执行器、MappedStatement对象、数据库
为什么需要预编译
DBMS不需要再次编译sql语句
Mybatis都有哪些Executor执行器?它们之间的区别是什么?
simple、reuse、batch
Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?
支持,底层使用了cglib的动态代理,调用目标方法时,会进入拦截器、发现其值为null时。就会调用关联目标对象的sql,将值查询上来。在接着完成目标方法的调用。
模糊查询like语句该怎么写
#{} 传参时写’’ 、${} 和sql写一起、使用concat函数
在mapper中如何传递多个参数
map、javabean、@param
Mybatis如何执行批量操作
可以使用批量执行器、可以在sql语句写foreach循环
如何获取生成的主键
在map.xml中sql语句当中加属性keyProperty和useGeneratedKeys=‘true’
当实体类中的属性名和表中的字段名不一样 ,怎么办
使用别名、使用
什么是MyBatis的接口绑定?有哪些实现方式?
注解、xml中namespace
最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗
工作原理是jdk的动态代理、不能重载
Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
别名、resultMap
Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?
resultMap、parameterMap、sql、include
动态sql:foreach、if、trim、choose、when、otherwise
Mybatis是否可以映射Enum枚举类?
自定义TypeHandler
Mybatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理不?
以标签的形式编写动态sql
Mybatis是如何进行分页的?分页插件的原理是什么?
用PageHelper插件,拦截修改sql
简述Mybatis的插件运行原理,以及如何编写一个插件。
代理,实现Interceptor 接口并声明拦截哪些方法,然后在到xml里面进行配置
Mybatis的一级、二级缓存
一级是session级别、二级是map级别的(默认关闭的)。当执行了cud时,缓存会清空
resultMap