Spring
- 什么是Spring?作用?
(1)Spring 是软件框架, 是软件的半成品, 封装了很多软件需要的功能, 使用Spring开发软件, 可以快速的开发软件产品. 使用Spring就是使用Spring提供的组件功能, 使用时候必须遵守Spring约定.Spring 核心功能: IOC/DI 控制翻转/依赖注入、AOP 面向切面(儿)编程。
(2)Spring的作用是创建和管理对象!使用Spring可以更加简便的解决对象之间的依赖问题,实现解耦!
- Spring框架的优点都有什么?
(1)简化编程:Spring对JavaEE中的一些比较繁琐的API做了简化和封装,使用封装之后的API不仅代码更简洁,而且质量更高。
(2)解耦:对象之间的依赖关系由容器来统一管理、降低了对象之间的耦合度、方便代码的维护,同时也实现了资源的统一调度和管理。
(3)支持面向切面编程AOP:可以方便对程序添加通用的服务,比如事务、权限管理等。
(4)集成其它框架:不发明重复的轮子,集成其它一些优秀框架、使开发者用统一的并且更加简洁的方式来使用这些框架。轻量:可以依赖项目的实际要求,有选择的使用Spring框架的全部或者一部分。
- 什么是IOC/DI,实现原理是什么?
(1)IOC Inverse of Control 反转控制的概念,指的是对象之间的依赖关系交由容器(第三方)来管理。
(2)DI:Dependency Injection 依赖注入,指容器通过调用构造器或者set方法来建立对象之间的依赖关系。
- 列出IOC的3种主要注入方式?
(1)构造方法注入
(2)setter属性注入
(3)接口注入
- 构造器注入和 setter 依赖注入,那种方式更好?
每种方式都有它的缺点和优点。
(1)构造器注入保证所有的注入都被初始化,但是 setter 注入提供更好的灵活性来设置可选依赖。
(2)如果使用 XML 来描述依赖,Setter 注入的可读写会更强。
(3)经验法则是强制依赖使用构造器注入,可选依赖使用setter注入。
- 依赖注入和工厂模式之间有什么不同?
(1)虽然两种模式都是将对象的创建从应用的逻辑中分离,但是依赖注入比工厂模式更清晰。
(2)通过依赖注入,你的类就是 POJO,它只知道依赖而不关心它们怎么获取。
(3)使用工厂模式,你的类需要通过工厂来获取
- 简述Spring中常用的几种Advice注解?
(1)@Before:在方法执行前处理
(2)@AfterReturning:在方法正常执行后处理
(3)@AfterThrowing:在方法执行期间抛出异常时处理
(4)@After:在方法执行前后无论是否有异常也处理
(5)@Around:在方法前后进行处理
- 什么是Spring 的AOP,AOP的工作原理是什么?
(1)面向切面编程简称AOP,Spring AOP 是使用动态代理在运行期间植入增强的功能代码。
(2)Spring的一个关键的组件就是AOP,其中最重要的服务是声明性事务管理,这个服务建立在Spring的抽象事物管理之上。允许用户实现自定义切面,用AOP来完善OOP的使用,可以把Spring AOP看作是对Spring的一种增强。
- 简述Spring中常用注解?
(1)@Component :标准一个普通的spring Bean类。
(2)@Repository:标注一个DAO组件类。
(3)@Service:标注一个业务逻辑组件类。
(4)@Controller:标注一个控制器组件类。
(5)@Resource:注入组件.
- 关于@Autowired与@Resource的区别?
(1)`@Resource`注解是JavaEE中的,而`@Autowired`注解是Spring中的!
(2)当使用`@Resource`注解时,是优先`byName`自动装配的,要求被装配的属性名称与某个Bean Id一致,如果装配失败,则尝试`byType`自动装配!并且,尝试`byType`装配时,要求匹配类型的对象必须有且仅有1个,否则,就会出现错误!
(3)当使用`@Autowired`注解时,是优先`byType`检索匹配的对象的,如果是0个,将直接报错,如果是1个,则直接装配,如果超过1个,将尝试`byName`来装配,如果装配失败,将报错!
在实际开发项目时,并不区分以上这2个注解!
- 简述Spring中BeanFactory和ApplicationContext作用?/ 区别?
(1)ApplicationContext 是 BeanFactory接口的子接口。
(2)BeanFactory 采用的是延迟加载,第一次getBean的时候才会初始化Bean
(3)ApplicationContext是对BeanFactory的扩展,提供了更多的功能:国际化处理、事件传递、Bean自动装配、各种不同应用层的Context实现。
(4)结论:开发中尽量使用ApplicationContext 就可以了
- 什么是事务传播?
事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播。
- 介绍一下Spring的事物管理?
事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。开发中为了避免这种情况一般都会进行事务管理。Spring中也有自己的事务管理制,一般是使用TransactionMananger进行管理,可以通过Spring的注入来完成此功能。
spring提供了几个关于事务处理的类:
(1)TransactionDefinition //事务属性定义
(2)TranscationStatus //代表了当前的事务,可以提交,回滚。
(3)#PlatformTransactionManager这个是spring提供的用于管理事务的基础接口。
- 简述一下事务以及事务的特性?
事务:事务是一系列操作组成的业务单元,该业务单元内的操作是不可分割的,即:要么所有操作都做,要么所有操作都不做。
事务具有4个特性,缺一不可,即:ACID(原子性、一致性、隔离性和持久性)
(1)原子性:事务是不可分割的最小业务单元,事务内的操作要么全部都做,要么全部都不做。
(2)一致性:事务执行时,是从一个一致状态变成另一个一致状态。
(3)隔离性:一个事务的执行,不受其他事务(进程)的干扰。
(4)持久性:事务一旦提交,对数据库的改变是持久的。
- 简述Spring事务配置过程?
Spring提供了多种事务管理器,将事务的具体工作委托给底层的持久化机制来实现(一般是数据库)。Spring为不同的事务提供了一致的编程模型。具体使用时,可以选择使用声明式或者编程式事务。
SpringMVC
- 简述什么是MVC?
MVC是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码。将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC = Model(数据模型) + View(视图) + Controller(控制器)。
SpringMVC框架主要解决了V与C的交互问题,与M无关!
(1)Model(模型)是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据。
(2)View(视图)是应用程序中处理数据显示的部分,通常视图是依据模型数据创建的。
(3)Controller(控制器)是应用程序中处理用户交互的部分,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
- 简述SpringMVC的请求流程?
(1)用户发送请求至前端控制器DispatcherServlet
(2)DispatcherServlet收到请求调用HandlerMapping处理器映射器。处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
(3)DispatcherServlet通过HandlerAdapter处理器适配器调用处理器,执行处理器(Controller,也叫后端控制器)。
(4)Controller执行完成返回ModelAndView,,HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
(5)DispatcherServlet将ModelAndView传给ViewReslover视图解析器,ViewReslover解析后返回具体View,DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中),DispatcherServlet响应用户。
- SpringMVC如何解决线程安全性问题?
(1)SpringMVC中的Controller默认是单例的,因此有可能有多个请求访问同一个Controller实例,从而有可能产生线程安全问题。
(2)因此尽量避免在Controller中使用实例变量。
(3) 使用ThreadLocal变量。
- SpringMVC如何实现文件上载步骤?
RFC1867 规定了HTTP文件上载协议。
(1)客户端:form标签中使用属性 ENCTYPE="multipart/form-data" METHOD=POST,使用 input type=file 标签选择文件
(2)服务器端:导入commons-fileupload 组件,配置文件上载处理器,在控制器方法声明MultipartFile 类型变量接收上载文件。
- SpringMVC如何实现Excel文件下载?
(1)利用 Apache POI API生成Excel
(2)在控制器中设置 ContentType 为Excel文件类型
(3)在控制器中设置 Content-Disposition 设定下载文件名
MyBatis
- 什么是MyBatis?
MyBatis框架是一个持久层框架,用于解决数据库持久化存储方案。MyBatis就是可以明显简化开发的数据库持久化存储方案,开发者在使用MyBatis开发某个增/删/改/查功能时,只需要定义这个功能的抽象方法,及匹配的SQL语句即可!除此以外,MyBatis还提供了数据缓存的处理等其它功能!
- JDBC 跟 Mybatis的区别?
(1)Mybatis是一种支持SQL的持久层框架,底层仍然是jdbc。
(2)Mybatis相对于直接使用JDBC, 代码大大简化,比如能够直接将ResultSet中的数据转换成所需要的Java bean对象等
(3)MyBatis对SQL统一放到配置文件中进行管理,不用将SQL语句分散在各个java类中,方便代码的维护。
(4)JDBC代码相对繁琐但访问速度更快,比如使用JDBC批处理等方式效率比Mybatis要高。