栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring 八股

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring 八股

spring 八股
  • 1.IOC的注入方式有哪些?
  • 2.BeanFactory与ApplicationContext?
  • 3.spring bean的作用域?
  • 4.bean的生命周期
  • 5.五 种不同方式的自动装配

1.IOC的注入方式有哪些?

1.set注入

2.构造器注入

3.静态工厂的方法注入
静态工厂顾名思义,就是通过调用静态工厂的方法来获取自己需要的对象,为了让 spring 管理所有对象,我们不能直接通过"工程类.静态方法()"来获取对象,而是依然通过spring 注入的形式获取:

4.实例工厂的方法注入
实例工厂的意思是获取对象实例的方法不是静态的,所以你需要首先 new 工厂类,再调用普通的实例方法

2.BeanFactory与ApplicationContext?

二者都是IOC容器
实现BeanFactory接口的容器,是懒加载的,bean在容器启动时不会初始化,用到的时候才会初始化;而后者是饿汉式。

3.spring bean的作用域?

spring中,bean有如下几种作用域:

-----------------------------------------------------------------------------
singleton:单例模式:Spring IoC 容器中只会存在一个共享的 Bean 实例,无论有多少个Bean 引用它,始终指向同一对象。该模式在多线程下是不安全的。Singleton 作用域是Spring 中的缺省作用域,也可以显示的将 Bean 定义为 singleton 模式,配置为:


为了线程安全,可以用synchronized,加在方法上;或者用threadLocal

-----------------------------------------------------------------------------

prototype:原型模式,每次通过 Spring 容器获取 prototype 定义的 bean 时,容器都将创建一个新的 Bean 实例,每个 Bean 实例都有自己的属性和状态,而 singleton 全局只有一个对象。根据经验,对有状态的bean使用prototype作用域,而对无状态的bean使用singleton作用域。

-----------------------------------------------------------------------------

Request:一次 request 一个实例:request:在一次 Http 请求中,容器会返回该 Bean 的同一实例。而对不同的 Http 请求则会产生新的 Bean,而且该 bean 仅在当前 Http Request 内有效,当前 Http 请求结束,该 bean实例也将会被销毁


-----------------------------------------------------------------------------
session:在一次 Http Session 中,容器会返回该 Bean 的同一实例。而对不同的 Session 请求则会创建新的实例,该 bean 实例仅在当前 Session 内有效。同 Http 请求相同,每一次session 请求创建新的实例,而不同的实例之间不共享属性,且实例仅在自己的 session 请求内有效,请求结束,则实例将被销毁。
-----------------------------------------------------------------------------
global Session:在一个全局的 Http Session 中,容器会返回该 Bean 的同一个实例,仅在使用 portlet context 时有效。
-----------------------------------------------------------------------------

4.bean的生命周期



实例化

  1. 实例化一个 Bean,也就是我们常说的 new。
    IOC 依赖注入
  2. 按照 Spring 上下文对实例化的 Bean 进行配置,也就是 IOC 注入。
    setBeanNameAware 实现
  3. 如果这个 Bean 已经实现了 BeanNameAware 接口,会调用它实现的 setBeanName(String)方法,此处传递的就是 Spring 配置文件中 Bean 的 id 值
    BeanFactoryAware 实现
  4. 如果这个 Bean 已经实现了 BeanFactoryAware 接口,会调用它实现的 setBeanFactory,setBeanFactory(BeanFactory)传递的是 Spring 工厂自身(可以用这个方式来获取其它 Bean,只需在 Spring 配置文件中配置一个普通的 Bean 就可以)。
    ApplicationContextAware 实现
  5. 如果这个 Bean 已经实现了 ApplicationContextAware 接口,会调用
    setApplicationContext(ApplicationContext)方法,传入 Spring 上下文(同样这个方式也可以实现步骤 4 的内容,但比 4 更好,因为 ApplicationContext 是 BeanFactory 的子接口,有更多的实现方法)
    postProcessBeforeInitialization 接口实现-初始化预处理
  6. 如果这个 Bean 关联了 BeanPostProcessor 接口,将会调用
    postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor 经常被用作是 Bean 内容的更改,并且由于这个是在 Bean 初始化结束时调用那个的方法,也可以被应用于内存或缓存技术。
    init-method
  7. 如果 Bean 在 Spring 配置文件中配置了 init-method 属性会自动调用其配置的初始化方法。
    postProcessAfterInitialization
  8. 如果这个 Bean 关联了 BeanPostProcessor 接口,将会调用
    postProcessAfterInitialization(Object obj, String s)方法。
    注:以上工作完成以后就可以应用这个 Bean 了,那这个 Bean 是一个 Singleton 的,所以一般情况下我们调用同一个 id 的 Bean 会是在内容地址相同的实例,当然在 Spring 配置文件中也可以配置非 Singleton。
    Destroy 过期自动清理阶段
  9. 当 Bean 不再需要时,会经过清理阶段,如果 Bean 实现了DisposableBean 这个接口,会调用那个其实现的 destroy()方法;
    destroy-method 自配置清理
  10. 最后,如果这个 Bean 的 Spring 配置中配置了 destroy-method 属性,会自动调用其配置的销毁方法。
5.五 种不同方式的自动装配

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/351417.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号