一、 你对Spring框架的理解(特点)? Spring框架有哪些模块 ?
1、Spring是一个轻量级的IOC和AOP的容器框架,目的是简化企业应用程序的开发,使得开发者只需要关注业务需求;
特点:简化开发、解耦、集成其他框架
简化开发:spring对常用的API进行了封装;比如说对jdbc的封装,使用spring jdbc访问数据库,就不需要考虑如何获取连接和关闭的问题了
解耦:spring帮我们管理软件之间的关系,这样对象之间的耦合性就降低了
集成其他框架:方便优化和扩展其他功能;比如说和Mybatis的集成
2、Spring框架已经集合成20多个模块;
Spring Core:核心类库,提供IOC服务
Spring Context:提供框架式的Bean访问方式以及企业级功能
Spring AOP:提供AOP服务
Spring DAO:对JDBC的抽象,简化了数据访问异常的处理
Spring ORM:对现有的ORM框架的支持
Spring Web:提供了基本的面向Web综合特性,例如多方文件上传;
Spring MVC:提供了面向Web应用的Model-View-Controller实现
二、Spring的优点
1、简化开发、解耦、集成其他框架
2、低侵入式设计,代码污染级别低
3、Spring的DI机制提高了软件之间的解耦
4、Spring AOP支持将一些通用的任务进行集中式的管理,例如:安全、事务、日志等
三、什么是控制反转(IOC),什么是依赖注入(DI)?
IOC:就是对象之间的依赖关系由容器来创建,本来这层关系是由开发者自己来创建和维护的,使用spring框架后交给容器去管理维护,
这就是控制反转,BeanFactory接口是Spring Ioc容器的核心接口
DI:在spring容器中,通过set方法建立对象之间的依赖关系
控制反转是目标,而依赖注入是我们实现控制反转的一种手段
四、Java中实现依赖注入的三种方式
1、构造器注入
2、set方法注入
3、接口注入
五、Spring容器中如何创建对象
无参构造创建
静态工厂创建
实例工厂创建
六、Spring有几种配置方式
1、基于XML文件配置
2、基于注解的配置
注解代替XML方式的bean元素的配置,
这就是组件扫描,容器会扫描指定的包以及子包下面所有的类,如果类有一些特定的注解,则纳入容器进行管理
3、基于Java的配置
七、Spring Bean的生命周期?
Spring Bean的生命周期指的是Bean元素被实例化,和被销毁的过程。我们通过init-method属性指定初始化方法;通过destroy-method方法指定销毁方法
八、什么叫延迟加载?
容器启动后将所有作用域为单例的bean创建好,但是有的业务场景我们不需要提前创建好
我们可以在bean中设置lazy-init为true,容器启动后作用域为单例的bean就不再创建
九、什么叫自动装配?
就是将一个bean注入其他的bean的property中,默认情况下,容器不会自动装配,需要我们手动设定。Spring可以通过Bean Factory的注入方式来搞定bean之间的依赖关系,达到自动装配的目的
十、Spring Bean元素的作用域?
Spring Bean元素支持5种作用域
1、Singleton:单例模式,在整个Spring IOC的容器中,在此模式定义的bean将只有一个实例
2、Prototype:多例模式,每次通过容器getBean方法获取bean时,都会产生一个新的Bean的实例
3、Request:对于每次http请求时,使用request定义的bean都会产生一个新的实例,只有在web应用时,作用域才会生效
4、Session:对于每次http session请求时,使用session定义的bean都会产生一个新的实例
5、Globalsession:每个全局的http session,使用session定义的bean都会产生一个新的实例
十一、Spring Bean是线程安全的吗?
Spring Bean并没有对单例的bean进行多线程的封装处理,线程安全问题和并发问题需要开发者自己考虑
实际上,大部分的bean的状态是固定的,因此spring单例的bean是安全的;如果bean有多种状态,就需要考虑线程安全的问题了
十二、Spring框架中都用到了哪些设计模式
1、代理模式,在AOP中被使用最多
2、单例模式,在Spring配置文件中定义bean的时候默认的是单例模式
3、工厂模式,BeanFactory用来创建对象的实例
4、模板方法,用来解决重复性代码
5、前端控制器,Spring提供了DispatcherServlet对请求进行分发
6、视图帮助,Spring提供了一系列的JSP标签
7、依赖注入,它是贯穿于BeanFactory/ApplicationContext接口的核心理念
十三、Spring AOP(面向切面)编程的原理
AOP面向切面编程是一种思想,它是在业务处理过程中的切面进行提取,以达到优化代码的目的,减少重复代码的目的,比如我们在编写各个模块的业务逻辑时,都会写日志记录、事务控制等等这些明显存在重复的代码,我们运用面向切面的编程思想,采用横切技术,将代码中的重复部分抽取出来放在其他地方集中管理,调用。形成日志切面、事务切面等,使工作效率提高,代码变得整洁优雅,是面向对象编程的一种扩展
Spring AOP的编程原理:
代理机制
JDK的动态代理:只能用于实现接口的类产生代理
Cglib代理:针对于没有实现接口的类产生代理,应用的是底层的字节码增强技术,生成当前类的子类对象
十四、什么是Spring MVC?
Spring MVC是一个基于MVC框架用于简化web应用程序开发的应用开发框架,它是spring的一部分,属于表现层的框架
MVC(Model 模型,View 视图,Controller 控制器)
它是一种软件架构思想,也是一种开发模式,它将软件划分为三个模块,分别是模型、视图、控制器。
模型:用于封装业务逻辑处理;视图:用于数据展现和操作界面;控制器:用于协调视图和模型;
处理流程:视图将请求发送给控制器,控制器选择对应的模型来处理,模型将处理结果交给控制器,控制器选择合适的视图来展现处理结果
十五、Spring MVC的五大组件
1、前端控制器(DispatcherServlet)
2、映射处理器(HandlerMapping)
3、处理器(Controller)
4、模型和视图(ModelAndView)
5、视图解析器(ViewResolver)
十六、Spring MVC的运行原理
客户端将请求提交到前端控制器,前端控制器查询一个或多个映射处理器,找到处理请求的Controller,前端控制器将请求提交到Controller,Controller调用业务逻辑处理后,返回模型和视图,前端控制器查询一个或多个视图解析器,找到模型和视图指定的视图,视图负责将结果展现给用户