1.对于spring的理解
1.Spring是实现了工厂模式的工厂类,类名为BeanFactory,子类为ApplicationContext。Spring相当于一个大的工厂类,在配置文件中使用bean元素配置文件创建实例化对象;
2.Spring提供了对象IOCd支持,利用IOC可以很好的实现模块之间的解耦;
3.Spring提供了对AOP的封装,成为面向切面编程,系统中有很多不相干的方法,在这些方法中想要加入某种系统功能的代码,这种功能称为AOP;实现AOP采用了代理技术,客户端之间调用代理类,对外具有相同的方法声明,有两种方式可以实现相同的方法声明,一种是实现相同的接口,一种是作为目标的子类
2.使用Spring的好处
轻量:版本大小为2M
控制反转:通过控制反转实现了解耦,对象们给出他们的依赖,而不是创建或者查找依赖的对象们
面向切面:支持面向切面编程,并且把应用业务逻辑和系统服务分开
容器:Spring包含并管理应用中对象的生命周期和配置
MVC:Spring的WEB框架是精心设置的框架,是WEB框架的替代品
事务管理:Spring提供了一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务
3.ApplicationContext通常实现的是什么
FileSystemXmlApplicationContext:此容器从一个XML文件中加载beans的定义,XML bean配置文件的全路径名必须提供给他的构造函数
ClassPathXmlApplicationContext:此容器也从一个XML文件中加载beans的定义,这里需要正确设置classpath,因为这个容器将在classpath中找bean的配置
WebXmlApplicatonContext:此容器加载一个XML文件,此文件定义一个WEB应用的所有bean
4.什么是依赖注入
DI,依赖注入,无需创建对象,只需要描述对象如何被创建即可。
构造器依赖注入:通过容器触发一个类的构造器来实现,该类有一系列参数,每个参数代表一个对其他类的依赖
setter方法注入:是容器通过调用无参构造器或午餐static工厂方法实例化bean后,调用该bean的setter方法,即实现了基于setter的依赖注入
5.什么是springbeans
是形成Spring应用的主干的java对象,被Spring IOC容器初始化,配置和管理。这些bean通过容器中配置的元数据创建,比如的形式
6.spring支持的bean作用域
singleton:bean在每个springIOC只有一个实例
prototype:一个bean的定义可以有多个实例
request:每次http请求都会创建一个bean,作用域在web的spring applicationContext中有效
session:在http的session中,一个bean对应一个实例,作用域在web的spring applicationContext中有效
global-session:在一个全局的http session中,一个bean对应一个实例,作用域在web的spring applicationContext中有效
7.解释spring框架中bean的生命周期
1.spring容器从xml读取bean并实例化
2.spring根据bean的定义填充属性
3.如果bean实现了beanNameAware接口,传递bean的id到setBeanName方法
4.如果bean实现了beanNameAware接口,传递bean的id到setBeanFactory方法
5.如果有任何和bean相关的BeanPostProccessors,spring会在postProcessAfterInitiazation()方法将被调用
6.如果bean实现了IntializingBean,调用afterPeopertySet方法,如果bean生命了初始化方法,调用此初始化方法
7.如果有beanPostProcessors和bean关联,这些bean的postProcessAfterInitialization()方法将被调用
8.如果bean实现了DispasableBean,将调用distory()方法
8.在spring中如何注入一个java集合
list:注入一组值,允许相同
set:注入一组值,不允许相同
map:注入键值对,键和值可以为任意值
props:注入键值对,键和值都得为String
9.不同方式的自动装配
no:默认不装配,通过显式ref属性进行装配
byName:通过参数名自动装配,Spring容器在配置文件中发现bean的autowire属性被设置成byName,之后容器试图匹配、装配和该bean的属性具有相同名字的bean
byType:通过参数类型装配,Spring容器在配置文件中发现bean的autowire属性被设置成byType,之后容器试图匹配、装配和该bean的属性具有相同类型的bean
constructor:这个方式类似于byType,但需要提供构造器参数,如果没有确定的带参数的构造器参数类型,将会抛出异常
aotudetect:首先尝试使用constructor来自动装配,如果无法装配,使用byType
10.Spring的事务管理的优点
为不同的事务API提供一个不变的编程模式
为编程式事务提供了一套简单的API而不是复杂的API,支持声明式事务,和Spring各种数据访问抽象层很好的集成
11.什么是基于java的spring注解配置
基于java的配置,允许在少量的java注解的帮助下,进行大部分spring配置而非通过xml文件
以@Bean为例,表示此方法要返回一个对象,作为一个bean注册到spring应用上下文
12.spring框架中用到了那些设计模式
1.代理模式:在AOP和remoting中被用的比较多
2.单例模式:在spring配置文件中定义的bean默认为单例模式
3.模板方法模式:用来解决代码重复的问题
4.前端控制器模式:spring提供了DispatherServlet来对请求进行分发
5.依赖注入模式:贯穿于BeanFactory和ApplicationContext接口的核心理念
6.工厂模式BeanFactory用来创建对象的实例
13.什么是ORM
对象关系映射,是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术,其本质上就是将数据从一种形式转化为另外一种形式
14.解释一下mybatis中命名空间的作用
项目中可能存在大量的sql语句,为每个sql语句起一个的唯一标识id就不是很容易,所以可以在mysql中为每个映射文件起一个唯一的命名空间,这样定义在这个映射文件的每个sql语句就成了定义在这个命名空间中的一个id,只要保证每个命名空间中id唯一,即使在不同映射文件的语句id相同,也不会产生冲突
15.mybatis中的动态sql
对于一些复杂的查询,可能会指定多个查询条件,但是这些条件可能存在也可能不存在,mybatis提供了动态sql解决这个问题
例如:if、choose、when、where、set、foreach等
16.说一下mybatis的一级缓存和二级缓存
mybatis首先去缓存中查询结果集,如果没有则去查询数据库,如果有则从缓存中取出返回结果。
二级缓存,作用域是一个mapper的namespace,在同一个namespace中查询sql可以从缓存中获取数据,二级缓存可以跨sqlsession的
17.springmvc生命周期
1.用户发送请求到前端控制器DispatcherServlet(前端控制器在web.xml中配置).
2.DispatcherServlet收到请求调用HandlerMapping处理器映射器.
3.处理器映射器HandlerMapping 找到具体的处理器(可以根据xml配置、注解进行查找),
生成处理器对象及处理器拦截器一并返回给DispatcherServlet.
4.DispatcherServlet 请求执行调用 HandlerAdapter处理器适配器.
5.HandlerAdapter处理器适配器,执行Handler找到相对应的controller(后端控制器)
6.Controller执行完成返回ModelAndView.
7.HandlerAdapter处理器适配器将controller执行结果ModelAndView返回给前端控制器DispatcherServlet.
8.前端控制器DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9.ViewReslove视图解析器r解析后返回具体View.
10.DispatcherServlet根据View进行渲染视图.
11.前端控制器DispatcherServlet响应用户。