最新整理的100道大厂高频spring面试题( 三 )

28、你建议使用构造方法注入还是Setter注入?可以同时使用构造方法注入和Setter注入 。 最好的解决方案是对强制依赖项使用构造方法注入 , 对可选依赖项使用setter方法注入 。
C.Spring Beans29、Spring beans是什么?Spring bean是构成Spring应用程序主干的Java对象 。 它们由springioc容器实例化、组装和管理 。 这些bean是使用提供给容器的配置元数据创建的 , 例如 , XML中形式定义 。
spring框架中定义的bean是单例bean 。 bean标记中有一个名为“singleton”的属性 , 如果指定为true , 则bean为单例;如果设置为false , 则bean将成为prototype bean 。 默认设置为true 。 所以 , spring框架中的所有bean默认都是单例bean 。
30、Spring bean定义包含什么?Spring bean的定义包含容器如何创建Bean、其生命周期及其依赖关系所需的所有配置元数据 。
31、如何向Spring容器提供配置元数据?向Spring容器提供配置元数据有三种重要方法:

  • 基于XML的配置文件
  • 基于注解的配置
  • 基于Java的配置
32、怎么定义bean的作用域?在Spring中定义时 , 我们还可以为bean声明一个作用域 。 它可以通过bean定义中的scope属性来定义 。 例如 , 当Spring每次需要生成一个新的bean实例时 , 这个bean的scope属性就是prototype 。 另一方面 , 当Spring每次需要时都必须返回同一个bean实例时 , bean scope属性必须设置为singleton 。
33、说明Sprig支持的bean作用域
  • singleton:Spring将bean定义的范围限定为每个Spring IOC容器只有一个单实例 。
  • prototype:单个bean定义有任意数量的对象实例 。
  • request:作用域为一次http请求 , 该作用域仅在基于web的Spring ApplicationContext情形下有效 。
  • session:作用域为HTTP Session , 该作用域仅在基于web的Spring ApplicationContext情形下有效 。
  • global-session:作用域为全局的HTTP session 。 该作用域也是仅在基于web的Spring ApplicationContext情形下有效 。
默认的作用域是singleton 。
34、单例作用域是线程安全的吗?不 , 单例bean在Spring框架中不是线程安全的 。
35、解释Spring Bean的声明周期
  • Spring容器 从XML 文件中读取bean的定义 , 并实例化bean 。
  • Spring填充bean定义(DI)中指定的所有属性 。
  • 如果bean实现了BeanNameAware接口 , spring会将bean的id传递给setBeanName()方法 。
  • 如果有任何BeanBeanPostProcessor与该bean关联 , Spring将调用postProcesserBeforeInitialization()方法 。
  • 如果bean实现了IntializingBean , 则调用其afterPropertySet()方法 。 如果bean声明了init方法 , 则调用指定的init方法 。
  • 如果有任何与bean关联的beanPostProcessor , 则将调用它们的postProcessAfterInitialization()方法 。
  • 如果bean实现l了DisposableBean , 它将调用destroy()方法 。
36、有哪些重要的bean生命周期方法?你能重写它们吗?有两个重要的生命周期方法 。
第一个是setup , 当bean加载到容器中时调用它 。 第二个方法是teardown方法 , 当bean从容器中卸载时调用该方法 。
bean标签有两个重要的属性(init-method和destroy-method) , 可以用它们定义自己的自定义初始化和销毁方法 。 还有相应的注解(@PostConstruct和@PreDestroy) 。
37、Spring的内部bean是什么?当一个bean仅被用作另一个bean的属性时 , 它能被声明为一个内部bean , 为了定义内部bean , 在Spring 的 基于XML的 配置元数据中 , 可以在 < property/ >或 < constructor-arg/ > 元素内使用< bean/ > 元素 , 内部bean通常是匿名的 , 它们的作用域一般是prototype 。
38、如何在Spring中注入Java集合?Spring提供以下几种集合的配置元素:
  • 类型用于注入一列值 , 允许有相同的值 。
  • 类型用于注入一组值 , 不允许有相同的值 。
  • 类型用于注入一组键值对 , 键和值都可以为任意类型 。
  • 类型用于注入一组键值对 , 键和值都只能为String类型 。
39、什么是Spring Bean装配?装配 , 或bean 装配是指在Spring 容器中把bean组装到一起 , 前提是容器需要知道bean的依赖关系 , 如何通过依赖注入来把它们装配到一起 。
40、什么是Bean自动装配?Spring 容器能够自动装配 自动关联 的bean , 这意味着 , 通过检查BeanFactory的内容 , 而不使用和元素 , 能通过Bean工厂自动处理bean之间的协作 。
41、解释不同类型的自动装配自动装配有五种模式 , 可用于指示Spring容器使用autowiring进行依赖注入: