面试题-Spring
主页
标签
文章
### 谈谈你对Spring的理解? - 发展进程:2004.3.24发布的Spring1.0,到现在最新的是2023.11.16发布的6.1.4版本,最常用的是spring5.0版本,是从全配置的形式逐渐编程全注解的形式,也不断提高了他的性能,提高了他的效率 ![](/api/file/getImage?fileId=65e83fc44521a0000d00079e) - 组成架构:Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置. **主要由以下几个模块组成:** - Spring Core:核心类库,提供IOC服务; - Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等); - Spring AOP:AOP服务; - Spring DAO:对JDBC的抽象,简化了数据访问异常的处理; - Spring ORM:对现有的ORM框架的支持; - Spring Web:提供了基本的面向Web的综合特性,例如多方文件上传; - Spring MVC:提供面向Web应用的Model-View-Controller实现。 - Spring的好处: ![](/api/file/getImage?fileId=65e8419f4521a0000d00079f) ### Autowired和Resource的区别? @Autowired为Spring提供的注解,需要导入org.springframework.beans.factory.annotation.Autowired;只按照byType注入 @Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。也可以用type属性设置为byType注入 ### Spring中的常用注解? 1. 声明bean的注解 **@Component** 组件,没有明确的角色 **@Service** 在业务逻辑层使用(service层) **@Repository** 在数据访问层使用(dao层) **@Controller** 在展现层使用,控制器的声明(C) 2. 注入bean的注解 **@Autowired**:由Spring提供 **@Inject**:由JSR-330提供 **@Resource**:由JSR-250提供 3. java配置类相关注解 **@Configuration** 声明当前类为配置类,相当于xml形式的Spring配置(类上) **@Bean** 注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式(方法上) **@ComponentScan** 用于对Component进行扫描,相当于xml中的(类上) 4. 切面(AOP)相关注解 **@Aspect** 声明一个切面(类上) **@After** 在方法执行之后执行(方法上) **@Before** 在方法执行之前执行(方法上) **@Around** 在方法执行之前与之后执行(方法上) **@PointCut** 声明切点 **@EnableAspectJAutoProxy** 开启Spring对AspectJ代理的支持(类上) 5. **@Value**注解 6. 定时任务相关 **@EnableScheduling** 在配置类上使用,开启计划任务的支持(类上) **@Scheduled** 7. SpringMVC部分 **@Controller** 声明该类为SpringMVC中的Controller **@RequestMapping** 用于映射Web请求,包括访问路径和参数(类或方法上) **@ResponseBody** 支持将返回值放在response内,而不是一个页面,通常用户返回json数据(返回值旁或方法上) **@RequestBody** 允许request的参数在request体中,而不是在直接连接在地址后面。(放在参数前) **@PathVariable** 用于接收路径参数,比如@RequestMapping(“/hello/{name}”)申明的路径,将注解放在参数中前,即可获取该值,通常作为Restful的接口实现方法。 **@RestController** 该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody。 ### Spring中支持几种作用域 1. prototype:为每一个bean请求提供一个实例。 2. singleton:默认,每个容器中只有一个bean的实例,单例的模式由BeanFactory自身来维护。 3. request:为每一个网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。 4. session:与request范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效。 5. global-session:全局作用域,global-session和Portlet应用相关。当你的应用部署在Portlet容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。全局作用域与Servlet中的session作用域效果相同。 ### Spring中事务的隔离级别 **DEFAULT:**使用数据库本身使用的隔离级别, ORACLE(读已提交) MySQL(可重复读) **READ_UNCOMITTED:**读未提交(脏读)最低的隔离级别,一切皆有可能。 **READ_COMMITED:**读已提交,ORACLE默认隔离级别,有幻读以及不可重复读风险。 **REPEATABLE_READ:**可重复读,解决不可重复读的隔离级别,但还是有幻读风险。 **SERLALIZABLE:**串行化,最高的事务隔离级别,不管多少事务,挨个运行完一个事务的所有子事务之后才可以执行另外一个事务里面的所有子事务,这样就解决了脏读、不可重复读和幻读的问题了 ### Spring事务实现的方式 **编程式事务管理:**这意味着你可以通过编程的方式管理事务,这种方式带来了很大的灵活性,但很难维护。 **声明式事务管理:**这种方式意味着你可以将事务管理和业务代码分离。你只需要通过注解或者XML配置管理事务。
上一篇:
面试题-Mysql
下一篇:
面试题-基础
Title
-
Artist
0:00