您好,欢迎访问无锡市新世纪教育培训中心!

0510-82206043

全国咨询热线

您现在所在位置: 主页 > 培训课程 > 语言编程

高频面试题,别再栽在Spring Bean的生命周期这了

  • 新手入门
  • 基础内容
  • 实际操作
  • 职称实战

高频面试题,别再栽在Spring Bean的生命周期这了Spring Bean的生命周期是Spring面试热点问题。经常…

累计报名100人

课程概述

高频面试题,别再栽在Spring Bean的生命周期这了


Spring Bean的生命周期是Spring面试热点问题。经常在各种各样的面试里被问到,当然,面试官这么喜欢考这个问题,也充分说明了理解它的重要性,通常面试管的目的,是想要考察你对于Spring的微观了解,以及对Spring的宏观认识。


今天,我们一起来好好理理这些高频面试问题~


一、什么是 spring bean?

它们是构成用户应用程序主干的对象。


Bean 由 Spring IoC 容器管理。


它们由 Spring IoC 容器实例化,配置,装配和管理。


Bean 是基于用户提供给容器的配置元数据创建


二、一个 Spring Bean 定义 包含什么?

一个Spring Bean 的定义包含容器必知的所有配置元数据,包括如何创建一个bean,它的生命周期详情及它的依赖。


三、spring 支持集中 bean scope?

Spring bean 支持 5 种 scope:


Singleton - 每个 Spring IoC 容器仅有一个单实例。语言.webp.jpg


Prototype - 每次请求都会产生一个新的实例。


Request - 每一次 HTTP 请求都会产生一个新的实例,并且该 bean 仅在当前 HTTP 请求内有效。


Session - 每一次 HTTP 请求都会产生一个新的 bean,同时该 bean 仅在当前 HTTP session 内有效。


Global-session - 类似于标准的 HTTP Session 作用域,不过它仅仅在基于 portlet 的 web 应用中才有意义。Portlet 规范定义了全局 Session 的概念,它被所有构成某个 portlet web 应用的各种不同的 portlet 所共享。在 global session 作用域中定义的 bean 被限定于全局 portlet Session 的生命周期范围内。如果你在 web 中使用 global session 作用域来标识 bean,那么 web 会自动当成 session 类型来使用。


仅当用户使用支持 Web 的 ApplicationContext 时,最后三个才可用。


四、spring bean 容器的生命周期是什么样的?

流程如下:


通过构造方法实例化 Bean 对象。

通过 setter 方法设置对象的属性。

通过Aware,也就是他的子类BeanNameAware,调用Bean的setBeanName()方法传递Bean的ID(XML里面注册的ID),setBeanName方法是在bean初始化时调用的,通过这个方法可以得到BeanFactory和 Bean 在 XML 里面注册的ID。

如果说 Bean 实现了 BeanFactoryAware,那么工厂调用setBeanFactory(BeanFactory var1) 传入的参数也是自身。

把 Bean 实例传递给 BeanPostProcessor 中的 postProcessBeforeInitialization 前置方法。

完成 Bean 的初始化

把 Bean 实例传递给 BeanPostProcessor 中的 postProcessAfterInitialization 后置方法。

此时 Bean 已经能够正常时候,在最后的时候调用 DisposableBean 中的 destroy 方法进行销毁处理。



我们对这详细的可能有时候难以记忆,可能还是理解不深,而我们可以从四到五个方面来记忆,


构造实例化

属性赋值

完成初始化

(前后处理)

使用后销毁

而从这五个方面来记忆,或许就能把这个图扩展开,从而言简意赅的回答面试官的问题。


哪些是重要的bean生命周期方法? 你能重载它们吗?

五、哪些是重要的bean生命周期方法? 你能重载它们吗?

有两个重要的bean 生命周期方法,第一个是setup , 它是在容器加载bean的时候被调用。第二个方法是 teardown  它是在容器卸载类的时候被调用。


The bean 标签有两个重要的属性(init-method和destroy-method)。用它们你可以自己定制初始化和注销方法。它们也有相应的注解(@PostConstruct和@PreDestroy)。


六、什么是 spring 的内部 bean?

只有将 bean 用作另一个 bean 的属性时,才能将 bean 声明为内部 bean。为了定义 bean,Spring 的基于 XML 的配置元数据在 <property> 或 <constructor-arg>中提供了 <bean> 元素的使用。内部 bean 总是匿名的,它们总是作为原型。


例如,假设我们有一个 Student 类,其中引用了 Person 类。这里我们将只创建一个 Person 类实例并在 Student 中使用它。


Student.java  public class Student {  private Person person;  //Setters and Getters  }  public class Person {  private String name;  private String address;  //Setters and Getters  }  bean.xml  <bean id=“StudentBean" class="com.edureka.Student">  <property name="person">  <!--This is inner bean -->  <bean class="com.edureka.Person">  <property name="name" value=“Scott"></property>  <property name="address" value=“Bangalore"></property>  </bean>  </property>  </bean>  复制代码

七、什么是 spring 装配?

当 bean 在 Spring 容器中组合在一起时,它被称为装配或 bean 装配。 Spring 容器需要知道需要什么 bean 以及容器应该如何使用依赖注入来将 bean 绑定在一起,同时装配 bean。


八、什么是bean的自动装配?

Spring 容器能够自动装配相互合作的bean,这意味着容器不需要<constructor-arg>和<property>配置,能通过Bean工厂自动处理bean之间的协作。


九、自动装配有哪些方式?

自动装配可以简单理解为:通过注解或者一些简单的配置就能在 Spring Boot 的帮助下实现某块功能。


no:默认的方式是不进行自动装配,通过显式设置ref 属性来进行装配。

byName:通过参数名 自动装配,Spring容器在配置文件中发现bean的autowire属性被设置成byname,之后容器试图匹配、装配和该bean的属性具有相同名字的bean。

byType::通过参数类型自动装配,Spring容器在配置文件中发现bean的autowire属性被设置成byType,之后容器试图匹配、装配和该bean的属性具有相同类型的bean。如果有多个bean符合条件,则抛出错误。

constructor:这个方式类似于byType, 但是要提供给构造器参数,如果没有确定的带参数的构造器参数类型,将会抛出异常。

autodetect:首先尝试使用constructor来自动装配,如果无法工作,则使用byType方式。

十、自动装配有哪些局限性 ?

重写: 你仍需用 <constructor-arg>和 <property> 配置来定义依赖,意味着总要重写自动装配。

基本数据类型:你不能自动装配简单的属性,如基本数据类型,String字符串,和类。

模糊特性:自动装配不如显式装配精确,如果有可能,建议使用显式装配。

————————————————

版权声明:本文为CSDN博主「Java指南修炼」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/m0_68103752/article/details/123941458


老师介绍

  • 王老师

    南京财经大学会计硕士

    对财务管理、教学考试均有深入研究,理论功底扎实,授课思路清晰,深受学生欢迎。...

  • 秦老师

    苏州大学教育学本科

    授课风格幽默,让学生在欢乐中掌握知识要点,轻松快乐的完成备考任务。多年来,他一直致力于对国内各类考试命题的研究,擅长抓住考试重点带领考生在最短的备考时间内通过考试。...

在线客服

ONLINE SERVICE

联系电话

0510-82206043

返回顶部