SSM框架面试题

说一说Spring框架

是一个容器框架,非侵入式框架,轻量级框架;
提供对持久层的支持;
提供了WebMvc框架;
提供了IOC/DI;
提供对事物的支持;
提供Srping AOP面向切面编程;

======================================================================================================

Spring能帮我们做什么

实例化bean,并且管理bean与bean之间的依赖关系
Spring面向切面编程能帮助我们无耦合实现日志记录,性能统计,安全控制等功能
Spring能非常简单的帮我们管理数据库事务
Spring提供了与第三方框架无缝集成,

======================================================================================================

说一说Spring mvc框架

MVC全名是Model View Controller,是模型bai(model)-视图(view)-控制器(controller)的缩写。

Spring MVC是一个MVC框架。Spring MVC是基于Spring功能之上添加的Web框架,想用Spring MVC必须先依赖Spring;
SpringMVC的前端控制器DispatcherServlet,用于分发请求,使开发变得简单;
SpringMVVC 主要有三大组件:处理器映射器、处理器适配器、视图解析器

======================================================================================================

说一说Mybatis框架

Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC;
通过XML或注解来配置和映射原生信息,将 POJO映射成数据库中的记录;
通过xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对象和 statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回。

======================================================================================================

mybatis事务

一个使用 MyBatis-Spring 的其中一个主要原因是它允许 MyBatis 参与到 Spring 的事务管理中。 而不是给 MyBatis 创建一个新的专用事务管理器,MyBatis-Spring 借助了 Spring 中的 DataSourceTransactionManager 来实现事务管理。

它有两种实现方式:
  • 使用JDBC的事务管理机制:利用java.sql.Connection对象完成对事务的提交(commit())、回滚(rollback())、关闭(close())等
  • 使用MANAGED的事务管理机制:这种机制MyBatis自身不会去实现事务管理,而是让程序的容器如(tomcat,JBOSS,Weblogic,spring)来实现对事务的管理

======================================================================================================

说一说Spring Boot

是一个脚手架,Spring Boot是为了spring服务的,是用来简化spring应用的初始搭建以及开发过程

======================================================================================================

Spring mvc常用注解

@Controller 使用它标记的类就是一个SpringMVC Controller 对象
@RequestMapping,处理请求映射地址
@RequestParam ,将请求的参数绑定到方法中的参数上
@ResponseBody,将返回类型直接输入到http response body中
@RequestBody,方法参数直接被绑定到http request body中

======================================================================================================

Spring常用注解

@Component,标注为一个普通的bean
@Service
@Autowired
@Value
@Configuration,代替配置文件,相当于beans
@ComponentScan,配置扫描包
@Import,可以将普通类导入到spring容器中做管理

======================================================================================================

Spring Boot常用注解

@SpringBootApplication
@MapperScan

@MapperScan,spring-boot支持mybatis组件的一个注解,通过此注解指定mybatis接口类的路径,即可完成对mybatis接口的扫描

======================================================================================================

Spring有几种配置方式?

将Spring配置到应用开发中有以下三种方式:

基于XML的配置
基于注解的配置  @Configuration    @Bean
基于Java的配置  

======================================================================================================

Spring 作用域

singleton 全局只有一个实例
prototype 每次调用产生一个新的实例
	
在web使用的时候还有三个作用域,但是必须在web.xml中注册一个RequestContextListener ,
目的是为了设置每次请求开始和结束都可以使spring得到相应的事件。
	request 每次请求产生一个bean
	session 每个用户session可以产生一个新的bean,不同用户之间的bean互相不影响
	globalSession 作用和session类似,只是使用portlet的时候使用。

======================================================================================================

什么是spring循环依赖

转载: https://blog.csdn.net/chejinqiang/article/details/80003868

singletonObjects:第一级缓存,里面放置的是实例化好的单例对象;
earlySingletonObjects:第二级缓存,里面存放的是提前曝光的单例对象;
singletonFactories:第三级缓存,里面存放的是要被实例化的对象的对象工厂。

A首先完成了初始化的第一步,并且将自己提前曝光到singletonFactories中,此时进行初始化的第二步,发现自己依赖对象B,此时就尝试去get(B),发现B还没有被create,所以走create流程,B在初始化第一步的时候发现自己依赖了对象A,于是尝试get(A),尝试一级缓存singletonObjects(肯定没有,因为A还没初始化完全),尝试二级缓存earlySingletonObjects(也没有),尝试三级缓存singletonFactories,由于A通过ObjectFactory将自己提前曝光了,所以B能够通过ObjectFactory.getObject拿到A对象(虽然A还没有初始化完全,但是总比没有好呀),B拿到A对象后顺利完成了初始化阶段1、2、3,完全初始化之后将自己放入到一级缓存singletonObjects中。此时返回A中,A此时能拿到B的对象顺利完成自己的初始化阶段2、3,最终A也完成了初始化,进去了一级缓存singletonObjects中,而且更加幸运的是,由于B拿到了A的对象引用,所以B现在hold住的A对象完成了初始化。

======================================================================================================

Spring框架中的单例Beans是线程安全的么?

Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定。最简单的就是改变bean的作用域,把单例变为原型,每次请求bean相当于new Bean()所以就可以保证线程安全了

======================================================================================================

Spring自动装配Bean方式

no:没有自动装配
byName:根据bean名称
byType:根据类型
构造函数:根据构造函数
autodetect:首先通过构造函数使用autowired装配,如果不能,则通过byType自动装配

======================================================================================================

如何在Spring中注入一个Java Collection

Spring提供了以下四种集合类的配置元素:

<list> :   该标签用来装配可重复的list值。
<set> :    该标签用来装配没有重复的set值。
<map>:   该标签可用来注入键和值可以为任何类型的键值对。
<props> : 该标签支持注入键和值都是字符串类型的键值对。

======================================================================================================

Spring父容器和SpringMvc子容器

在SSM项目中,会有SpringMvc容器(子容器)和Spring容器(父容器) 一共2个容器
基本规则:

子容器可以访问父容器的bean,父容器不能访问子容器的bean.

当<context:component-scan base-package=“com.test" />配置到applicationContext.xml中,而springMVC中不配置的时候,Spring加载了所有的bean,Controller层的这个bean,springMVC虽然可以访问到,但是springMVC认为他只是一个bean,而不知道他还是一个controller,所以请求无法到达controller。controller 需要被springmvc容器进行处理,请求才可以被处理。为了避免这种问题的产生,我们一般配置springMVC只扫描controller包。spring容器扫描service,dao层的包,各司其职。

======================================================================================================

mybatis核心类

作用: http://www.mybatis.cn/archives/715.html

SqlSessionFactoryBuilder
SqlSessionFactory
SqlSession
Executor
StatementHandler
ResultSetHandler
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值