Spring面试(一)

什么是spring框架
spring是一种轻量级框架,由很多模块组成,这些模块可以很方便的协助我们进行开发。
比如核心容器,数据访问/集成,Web,AOP(面向切面编程),测试模块,消息模块等。
Core Container中的Core组件是Spring所有组件的核心,Bean组件时实现IOC和依赖注入的基础,AOP组件用来实现面向切面编程。

@RestController vs @Controller
@Controller返回一个页面
单独使用 @Controller 不加 @ResponseBody的话一般使用在要返回一个视图的情况,这种情况属于比较传统的Spring MVC 的应用,对应于前后端不分离的情况。
@RestController 返回JSON 或 XML 形式数据
但@RestController只返回对象,对象数据直接以 JSON 或 XML 形式写入 HTTP 响应(Response)中,这种情况属于 RESTful Web服务,这也是目前日常开发所接触的最常用的情况(前后端分离)。

SpringIOC和AOP的理解
IOC(控制反转)是一种设计思想,就是将原本在程序中手动创建对象的控制权,交给Spring框架管理。IOC在其他语言也有应用,并非Spring特有,IOC容器是Spring用来实现IOC的载体,IOC容器实际上就是个Map(key,value),Map中存放的是各种对象。
将对象之间的互相依赖关系交给IOC容器管理,并由IOC容器完成对象的注入。IOC容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解,完全不用考虑对象是如何被创建出来的。
Spring时代一般通过XML文件来配置bean,后面到了Spring boot流行注解配置。

AOP(面向切面编程)能够将那些与业务无关,却为业务代码模块所共同调用的逻辑或责任(比如事务处理,日志管理,权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合。
SpringAop基于动态代理,如果要代理的对象实现了某个接口,Spring Aop就会使用JDK Proxy,去创建代理对象,对与没有实现接口的对象,Spring AOP使用Cglib。

Spring Bean的作用域
singleton:唯一bean实例,spring中的bean默认都是单例的。
prototype:每次请求都会创建一个新的bean实例。
request:每次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。
session:每次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP session内有效。
global-session: 全局session作用域,仅仅在基于portlet的web应用中才有意义,Spring5已经没有了。Portlet是能够生成语义代码(例如:HTML)片段的小型Java Web插件。它们基于portlet容器,可以像servlet一样处理HTTP请求。但是,与 servlet 不同,每个 portlet 都有不同的会话

Spring bean的生命周期
Bean容器找到配置文件中Spring Bean的定义。
Bean容器利用JAVA 反射API创建一个bean实例。
如果有一些属性,则使用set方法设置属性。
如果Bean实现了BeanNameAware接口,调用setBeanName()方法,传入Bean名称。
如果Bean实现了BeanClassLoaderAware接口,调用setClassLoader()方法,传入ClassLoader对象。
如果实现了其他xxAware接口,调用对应的方法。
如果有和加载这个 Bean 的 Spring 容器相关的 BeanPostProcessor 对象,执行postProcessBeforeInitialization() 方法。
如果Bean实现了InitializingBean接口,执行afterPropertiesSet()方法。
如果Bean在配置文件中配置了init-method属性,执行指定方法。
如果有和加载这个 Bean 的 Spring 容器相关的 BeanPostProcessor 对象,执行postProcessAfterInitialization() 方法。
当要销毁Bean的时候,如果Bean实现了DisposableBean接口,执行destory()方法。
当要销毁Bean的时候,如果Bean在配置文件中配置了destroy-method 属性,执行指定方法。

Spring MVC工作原理
客户端(浏览器)发送请求到DispatcherServlet。
DispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler。
解析到对应的Handler(也就是常说的Controller),由HandlerAdapter适配器处理。
HandlerAdapter会根据Handler来调用真正的处理器开始处理请求,并处理相应的业务逻辑。
HandlerAdapter处理完成后返回ModelAndView对象,Model是返回的数据对象,View是逻辑上的视图。
ViewResolver 会根据逻辑 View 查找实际的 View。
DispaterServlet 把返回的 Model 传给 View(视图渲染)。
把 View 返回给请求者(浏览器)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值