前景提要:
作者会定期更新面试题,有兴趣一起学习的同学可以点个关注。
1。请写出 spring 中常用的依赖注入方式。
IOC:控制反转,把对象的创建和对象的依赖关系交给spring管理
好处是解耦,和方便开发
DI:依赖注入,是IOC的实现方式。
依赖注入的方式有两种;set方法注入的方式和构造方法注入的方式,xml和注解都行,随着 spring版本更新,完全注解化开发可替代XML方式。
要和IOC容器的了两种实现方式和Bean管理的两种方式区分。
注:IOC容器的两种实现方式:
BeanFactory(接口),spring内部使用,加载配置文件时不会创建对象,在使用对象时创建。
ApplicationContext,BeanFactory的子接口,加载配置文件时创建对象。
Bean管理:创建Bean(创建对象),配置Bean(使用@Autowried等注解)
2. 简述Spring中如何基于注解配置Bean和装配Bean
开启注解扫描,使用<context:component-scan base-package="">,或在配置类使用 @ComponentScan()
在具体类上加Component,service等注解,把对象交给spring管理
使用@Autowried,@Resource等进行bean装配
3.简述Spring中IOC容器常用的接口和具体的实现类
BeanFactory,IOC容器的最底层实现,面向spring框架本身。
ApplicationContext,BeanFactory的字接口,提供了更多高级功能,面向开发者。
ConfigurableApplicationContext,Application的子接口,扩展了cloe(),refresh()等关闭,刷新容 器 的 方 法。
ClassPathXmlApplicationContext,从classpath的XML配置文件中读取.
FileSystemXmlApplicationContext,从文件系统中的XML配置文件读取上下文。
XmlWebApplicationContext,由Web应用的XML文件读取上下文。
4.请解释Spring Bean的生命周期?
通过构造器或工厂的方式创建对象
给Bean对象属性注入值
调用后置处理器的postProcessBeforeInitialization
调用初始化方法,进行初始化,初始化方法是bean标签的init-method属性进行指定
调用后置处理器的postProcessAfterInitialization
使用
IOC容器关闭,销毁bean
5.简单的谈一下SpringMVC的工作流程?
用户发送请求到DispatcherServlet前端控制器
DispatcherServlet前端控制器收到请求,调用HandlerMapping处理器映射器
HandlerMapping处理器映射器找到具体的处理器,生成处理器对象和处理器拦截器对象(如 果 有),一并返回DispatcherServlet
DispatcherServlet调用HandlerAdapter处理器适配器
HandlerAdapter经适配调用具体的的处理器即后端控制器Controller
Controller执行,返回ModelAndView返回DispatcherServlet
DispatcherServlet将ModelAndView传给视图解析器ViewReslover,
视图解析器解析,返回具体view
DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
DispatcherServlet响应用户
6.简述Spring 中bean的作用域?
singleton(默认),单例bean,IOC容器只创建一个bean,后续从IOC 容器获取的都是同一个bean
protyotype,多例模型(原型模型),每次从IOC容器获取,都会创建新的bean
request,每次HTTP请求会产生一个新的bean,该bean在HTTP请求中共享。
session,每次会话会产生一个新的bean,该bean在会话中共享
global-session,全局HTTP会话,spring5已经没有了。
知识点补充:
设置bean作用域方法,bean标签的scope属性,和注解。
单例模式和单例Bean有一定区别,单例bean并不是spring容器只有一个该类型的bean,
该类型bean可能有多个不同id的bean,spring获取bean根据name,type.
单例bean是线程不安全的。