Spring框架-八股文-面试题

什么是Spring?

Spring是一个轻量级的,非侵入性的,针对企业级开发的免费开源框架;
Spring框架-八股文-面试题

Spring5的结构体系分为四层

  1. Test层:Test之所以在最底层,意思是上面的所有内容都可以进行Test单元测试;
  2. Core Container层,核心容器层;
  3. AOP、Aspectj、
  4. Data:数据访问层;
  5. Web应用支持;


Spring框架的好处?

  1. 轻量:非侵入性的,所依赖的东西少,部署简单;
  2. 控制反转:将Bean的创建交给Spring来管理,通过依赖注入,将依赖主动的注入的Bean中,无需关系依赖的具体实现;
  3. 面向切面编程AOP:Spring提供了面向切面的编程,可以将业务逻辑和具体服务分开;
  4. 事务管理:Spring提供更方便的事务管理功能,声明式事务;
  5. 松耦合:通过简单的xml或注解配置即可实现依赖注入,且无需关系具体实现;
  6. 便于集成其他框架;


什么是IOC,Spring是如何实现的?

IOC,Inversion of Control(控制反转)

  1. IOC是一种设计思想,在Java开发中,将你设计好的对象交给SpringIOC容器来管理,而不是通过代码显示的创建对象
  2. 创建和查找依赖对象的控制权交给IOC容器,由IOC容器进行注入,组合对象。这样对象与对象之间就是松耦合的,便于测试和功能复用
  3. 使程序的整个体系结构可维护性,灵活性,可拓展性都变得更好

DI(依赖注入)

  1. 依赖注入,是IOC容器装配,注入对象的一种方式
  2. 依赖注入,通过简单的配置就可以注入需要的资源,完成自身的业务逻辑,不需要关心资源的出处和具体实现

Spring如何实现IOC?

  1. 基于XML配置文件
  2. 基于注入配置
  3. 基于注解+Java代码显示配置


什么是AOP?Spring如何实现的?



Spring中Bean的生命周期

bean生命周期(5步)

  1. 通过无参构造器创建bean实例;
  2. 为bean对象注入属性(调用set方法);
  3. 调用bean的初始化方法(需要我们手动配置);Bean标签的init-method属性
  4. bean对象可以使用了(对象获取到了);
  5. 当容器关闭的时候,调用bean对象的销毁方法(手动配置,手动调用)Bean标签的destroy-method属性

bean的生命周期(7步)

  1. 通过无参构造器创建bean实例;
  2. 为bean对象注入属性(调用set方法);
  3. 把bean实例传递到bean后置处理器的方法;postProcessBeforeInitialization()
  4. 调用bean的初始化方法(需要我们手动配置);
  5. 把bean实例传递到bean后置处理器的方法;postProcessAfterInitialization()
  6. bean对象可以使用了(对象获取到了);
  7. 当容器关闭的时候,调用bean对象的销毁方法(手动配置,手动调用)


Spring常用的注入方式有哪些?

在XML中配置

  1. 节点注册:在bean节点内通过标签的属性直接注入,一般注入一些工厂bean什么的东东
  2. bean的注入:
    1.set方法注入(property标签)
    2.构造器注入(constructor-arg标签)
    3.级联注入(级联注入需要先获取对象,在注入,所以要有get方法和set方法)
    4.p名称空间注入(需要引入p名称空间)
    5.注入字面量量,集合,带特殊字符的属性

注解方式
1.bean的注册:

  1. @Component //注册所有bean
  2. @Controller //注册控制层的bean
  3. @Service //注册服务层的bean
  4. @Repository //注册dao层的bean

2.bean的注入

  1. @Autowired 作用于 构造方法、字段、方法,常用于成员变量字段之上。
  2. @Autowired + @Qualifier 注入,指定 bean 的名称
  3. @Resource JDK 自带注解注入,可以指定 bean 的名称和类型等


BeanFactory和ApplicationContext有什么区别?

BeanFactory是IOC的底层实现(程序员不推荐使用,留给Spring自用)
ApplicationContext



Spring主动装配Bean的方式有哪些?

基于xml配置bean的装配方式:

  1. no:默认,不进行自动装配,需要手动设置ref属性装配bean;
  2. byName:根据名称进行自动装配(bean的id和bean的property相同)
  3. byType:根据类型进行自动装配;
  4. constructor:根据构造函数进行自动装配,参数是通过byType进行自动装配;
  5. autodetect:自动探测,如果有构造函数就根据构造函数自动装配,否则就是要byType;(已弃用)

基于注解的方式进行自动装配:

  1. @Autowired:根据类型进行自动装配(可以标注在构造方法,setter方法,参数,成员变量,注解上)
  2. @Qualifier:根据bean的名称进行自动装配;需要配合@Autowired一起使用
  3. @Resource:即可根据类型进行自动装配,也可根据名称自动装配(指定value属性);
  4. @Value:注入配置信息,字面量;


Spring事务的实现方式有哪些?

  1. 编程式事务:在代码中手动调用commit()、rallback();等事务相关的方法;
  2. 基于xml方式声明事务;
  3. 基于注解@Transactional声明事务,需要在Spring核心配置文件中开启事务注解能力;
  4. 基于Aspectj AOP配置(注解)事务;


介绍一下SpringMVC

SpringMVC是一种基于java实现的请求驱动型的轻量级Web框架;

SpringMVC通过一套注解,让一个简单的Java类成为处理请求的控制器,无序实现任何接口,同时还支持Restful风格的请求设计;

SpringMVC的六大组件:

  1. 前端控制器(DispatcherServlet)
    用户发送的请求会被前端控制器拦截,并进行分发处理,是整个SpringMVC的核心控制器,DispatcherServlet的存在极大的降低了组件之间的耦合性;
  2. 处理器映射器(HandlerMapping)
    HandlerMapping 的主要作用就是将请求的URL映射到到具体的处理器(Controller),之后会生成处理器对象与处理器拦截器(处理器链ExecutionChain)并返回给DispatcherServlet;
  3. 处理器适配器(HandlerAdaptor)
    HandlerAdaptor拿到DispatcherServlet发送过来的ExecutionChain,会通过反射调用处理器方法执行,最后将结果返回给DispatcherServlet(可能是Json数据,可能是ModelAndView对象);
  4. 处理器(Handler)
    每一个Controller都是一个处理器
  5. 视图解析器(ViewResolver)
    ViewResolver 的作用就是生成 View 视图并返回,接收 DispatcherServlet 转发来的 ModelAndView,首先将View中的逻辑视图名转换成物理视图名(即页面的具体地址,)再生成 View 视图对象,最后将 Model 数据填充到 View 中,返回视图给 DispatcherServlet;最后 DispatcherServlet 在响应给用户;
  6. 视图(View)


SpringMVC的执行流程?

  1. 用户发起请求, DispatcherServlet 进行拦截;
  2. DispatcherServlet 将拦截到的请求转发给 HandlerMapping;
  3. HandlerMapping 将请求的URL映射到具体的处理器,期间可能会经过多个处理器拦截器,最后得到 ExecutionChain,返回给 DispatcherServlet;
  4. DispatcherServlet 拿到 ExecutionChain 后会将其转发给 HandlerAdaptor;
  5. HandlerAdaptor 接受 DispatcherServlet 转发来的 ExecutionChain 后,会通过反射的方式逐个调用具体的 Handler;
  6. Handler 会返回一个 ModelAndView 对象(或 Json );
  7. HandlerAdaptor 会 ModelAndView 对象转发给 DispatcherServlet,然后 DispatcherServlet 会将其转发给 ViewResolver;
  8. ViewResolver 接收 DispatcherServlet 传递的 ModelAndView,会先将 View 中的逻辑视图名转换成物理视图名,最后 ViewResolver 将视图提交给 DispatcherServlet;
  9. DispatcherServlet 接收到 ViewResolver 提交的 View 后,会将 Model 中的数据渲染给 View 视图,最后响应给用户;
上一篇:SpringMVC原理、执行流程


下一篇:SpringMVC