面试题:Spring

21 篇文章 2 订阅
3 篇文章 0 订阅

1、什么是 Spring 框架?

Spring是一种轻量级框架,主要核心功能是ioc和aop,core组件是spring所有组件的核心,Beans和context是实现ioc的基础,aop是用来实现面向切面编程的。

2、@RestController vs @Controller

@RestController在@Controller的基础上加上了@ResponseBody这个 注解,使得返回的对象都变成json格式。通常用在前后端分离的项目中。

3、谈谈自己对于 Spring IoC 和 AOP 的理解

IOC

IOC是控制反转的意思,意思是把我们手动new出来的对象的控制权交给Spring管理,IOC容器本质是一个map,里面存放了Bean对象,将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。 IoC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。

AOP
AOP的意思是面向切面编程,将我们与业务无关的代码封装起来,简化我们的业务代码,增强我们的功能,比如事务、日志、权限管理等等都可以使用aop实现。aop的核心是动态代理,spring的动态代理有两种实现方式,分别是jdk和cglib,spring中如果代理的对象有接口,就会使用jdk动态代理,如果没有会使用cglib继承该类来代理。cglib在创建的时候比较慢,但是在运行的时候会比jdk要快。

4、Spring Aop和AspectJ Aop的区别

Spring Aop是运行时增强,基于动态代理实现,AspectJ Aop是编译期增强,是基于字节码修改增强。AspectJ Aop会更快。

5、Bean的生命周期

  • Bean 容器找到配置文件中 Spring Bean 的定义。
  • Bean 容器利用 Java Reflection API 创建一个Bean的实例。
  • 如果涉及到一些属性值 利用 set()方法设置一些属性值。
  • 如果 Bean 实现了 BeanNameAware 接口,调用 setBeanName()方法,传入Bean的名字。
  • 如果 Bean 实现了 BeanClassLoaderAware 接口,调用 setBeanClassLoader()方法,传入 ClassLoader对象的实例。
  • 与上面的类似,如果实现了其他 *.Aware接口,就调用相应的方法。
  • 如果有和加载这个 Bean 的 Spring 容器相关的 BeanPostProcessor 对象,执行postProcessBeforeInitialization() 方法
  • 如果Bean实现了InitializingBean接口,执行afterPropertiesSet()方法。
  • 如果 Bean 在配置文件中的定义包含 init-method 属性,执行指定的方法。
  • 如果有和加载这个 Bean的 Spring 容器相关的 BeanPostProcessor 对象,执行postProcessAfterInitialization() 方法
  • 当要销毁 Bean 的时候,如果 Bean 实现了 DisposableBean 接口,执行 destroy() 方法。
  • 当要销毁 Bean 的时候,如果 Bean 在配置文件中的定义包含 destroy-method 属性,执行指定的方法。

在这里插入图片描述

6、Spring MVC执行流程

在这里插入图片描述

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

7、BeanFactory和ApplicationContext的区别

BeanFactory是spring最底层的接口,提供了基本的容器功能,比如创建和获取,ApplicationContext是继承BeanFactroy并且多了很多功能,比如国际化之类的功能,BeanFactory中的Bean在Spring容器启动的时候不会实例化Bean,只会在用到的时候才实例化,ApplicationConetxt中的Bean在Spring启动的时候就会实例化Bean,但可以设置懒加载。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值