目录
3、@RestController 和 @Controller的
25、BeanFactory与ApplicationContext有什么区别
35、对于依赖注入方式,你建议使用构造器注入还是setter方法注入/
37、@Transactional(rollbackFor = Exception.class)注解了解吗
八、Spring
1、什么是Spring框架
Spring是一种轻量级开发框架,为了提高开发人员的开发效率以及系统的可维护性
Spring的核心是控制反转,依赖注入,Aop(面向切面)相当于把每个bean与bean之间的关系交给第三方容器进行管理
Spring官网列出的Spring的六个特征
核心技术:依赖注入,AOP,事件,资源,i18n,验证,数据绑定,类型转换,spEl
测试:模拟对象,TestContext框架,Spring MVC测试,WebTestClient
数据访问:事务,DAO支持,JDBC,ORM,编组XML
Web支持:Spring MVC和Spring WebFlux Web框架
集成:远程处理,JMS,JCA,JMX,电子邮件,任务,调度,缓存
语言:Kotlin,Groovy,动态语言
2、列举一些重要的Spring模块
Spring Core:基础,可以说Spring其他所有的功能都需要以来该类库,主要提供IOC依赖注入功能
Spring Aspects:该模块为与AspectJ的继承提供支持
Spring AOP:提供了面向切面的编程实现
Spring JDBC:Java数据库连接
Spring JMS:Java消息服务
Spring ORM:用于支持Hibemate等ORM工具
Spring Web:为胡藏剑Web应用程序提供支持
Spring Test:提供了对Junit和TestNG测试的支持
3、@RestController 和 @Controller的
@Controller:返回一个页面
单独使用 @Controller 不加 @ResponseBody 的话一般使用在主要返回一个视图的情况,这种情况属于比较传统的Spring MVC的应用,对应于前后端 不分离的情况
@RestController:返回JSON或XML形式数据
但@RestController只返回对象,对象数据直接以JSON或xml形式写入HTTP相应(Response)中,这种情况属于RESTful Web服务,这也是目前日常开发所接触的最常用的情况(前后端分离)
@Controller + @ResponseBody 返回JSON或XML形式数据
如果你需要在Spring4之前开发RESTful服务的话,你需要使用 @Controller并结合@ResponseBody注解,也就是说 @controller + @ResponseBody = @RestController(Spring4之后新加的注解)
4、Spring的好处
1.轻量级:Spring是轻量的,基本的版本大约2MB
2.控制反转:Spring通过控制反转实现了松散耦合,对象们给他们的依赖,而不是创建或查找依赖的对象们
3.面向切面编程(AOP):Spring支持面向切面编程,并且把应用业务逻辑和系统服务分开
4.容器:Spring包含并管理应用中对象的生命周期和配置
5.MVC框架:Spring的Web框架是个精心设计的框架,是Web框架的一个很好的替代品
6.事务管理:Spring提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)
7.异常处理:Spring提供方便的API把具体技术相关的异常(比如JSBC,JibernateorJDO抛出的)转化为一致的unchecked异常
5、Spring能帮我们做什么
Spring能帮我们根据配置文件创建及组装对象之间的依赖关系。Spring根据配置文件来进行创建及组装对象间依赖关系,只需要改配置文件即可
Spring面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制,Spring面向切面编程能提供一种更好的方法来完成,一般通过配置方式,热切不需要再现有代码中添加任何额外代码,现有代码专注业务逻辑
Spring能非常简单的帮我们管理数据库事务,采用Spring,我们只需获取连接,执行SQL,其他事务相关的都交给Spring来管理了
Spring还能与第三方数据库访问框架无缝集成,而且自己也提供了一套JDBC访问模板,来方便数据库访问
Spring还能与第三方Web框架无缝集成,而且自己也提供了一套SpringMVC框架,来方便Web层搭建
Spring能方便的与JavaEE整合,与更多技术整合
6、Spring核心容器(应用上下文)模块
这是基本的Spring模块,提供Spring框架的基本功能,BeanFactory是任何以Spring为基础的应用的核心,Spring框架建立在此模块之上
7、什么是Springbeans?
Springbeas是那些形成Spring应用的主干的Java对象,他们被SpringIOC容器初始化,装配和管理,这些beans通过容器中配置的源数据创建
8、什么是Spring的内部bean
当一个bean仅被用作另一个bean的属性时,它能被声明为一个内部bean,为了定义innerbean,在Spring的基于XML的配置元数据中,可以在<property/>或<constructor-arg/>元素内使用<bean/>元素,内部bean通常是匿名的,他们的Scope一般是prototype
9、你怎样定义类的作用域
当定义一个<bean>在Spring里,我们还能给这个bean声明一个作用域。他可以通过bean定义中的scope属性来定义,当Spring要在需要的时候每次生产一个新的bean实例,bean的scope属性被指定为prototype,另一方面 ,一个bean每次使用的时候必须返回同一个实例,这个bean的scope属性必须设为singleton
10、什么是bean的自动装配
无序在Spring配置文件中描述Javabean之间的依赖关系,IOC容易会自动建立Javabean之间的关联关系
11、一个SpringBean定义包含什么?
一个SpringBean的定义包含容器必知的所有配置元数据,包括如何创建一个bean,他的生命周期详情及他的依赖
12、一个SpringBeans的定义需要包含什么?
一个SpringBean的定义包含容器必知的所有配置元数据,包括如何创建一个bean,他的生命周期详情及他的依赖
13、解释Spring支持的几种bean的作用域
1.singleton:bean在每个Springioc容器中只有一个实例
2.prototype:一个bean的定义可以有多个实例
3.request:每次http请求都会创建一个bean,该作用域仅在基于web的SpringApplicationContext情形下有效
4.session:在一个STTPSession中,一个bean定义对应一个实例,该作用域仅在基于web的SpringApplicationContext情形下有效
5.global-session:在一个全局的HTTPSession中,一个bean定义对应一个实例,该作用域仅在基于Web的SpringApplicationContext情形下有效。缺省的Springbean的作用域是Singletion
14、简单介绍一下Springbean的生命周期
bean定义:配置文件里面用<bean></bean>来进行定义
bean初始化:1.在配置文件中通过指定init-method属性来完成
2.实现org.springframwork.beans.factory.InitializingBean接口bean调用
得到bean实例
销毁bean:1.使用配置文件指定的destroy-method属性
2.实现org.springframwork.beans.factory.DisposeableBean接口