Java多例Bean的应用场景-easyExcel导入

这篇具有很好参考价值的文章主要介绍了Java多例Bean的应用场景-easyExcel导入。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


Java多例Bean的应用场景-easyExcel导入

1. bean注入方式(IOC)

Java多例Bean的应用场景-easyExcel导入

2. 有状态会话bean和无状态会话bean

有状态会话bean:每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。

无状态会话bean:bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean 的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用。由于没有特定的用户,那么也就不能保持某一用户的状态,所以叫无状态bean。但无状态会话bean 并非没有状态,如果它有自己的属性(变量),那么这些变量就会受到所有调用它的用户的影响,这是在实际应用中必须注意的。
面试题:单例 Bean 存在线程安全问题吗?
答:在 Bean 中尽量避免定义可变的成员变量。推荐的做法时在类中定义一个 ThreadLocal 成员变量,将需要的可变成员变量保存在 ThreadLocal 中。
不过,大部分 Bean 实际都是无状态(没有实例变量)的(比如 Dao、Service),这种情况下, Bean 是线程安全的。

3. 单例模式和多例模式

@Scope注解主要作用是调节Ioc容器中的作用域,在Spring IoC容器中主要有以下几种作用域:
基本作用域:singleton(单例)、prototype(多例);
Web 作用域(reqeust、session、globalsession);
自定义作用域。
目前有90%以上的业务系统都使用singleton单实例,因此spring也默认的类型也是singleton,singleton保证了全局是一个实例,对性能有所提高,但是如果实例中有非静态变量时,可能会导致线程安全、共享资源的竞争等问题。
当设置为prototype(多实例)时:每次连接请求,都会重新生成一个新的bean实例,这也会导致一个问题,当请求数越多,性能会降低,因为频繁创建的新的实例,会导致GC频繁,GC回收时长增加。要根据实际情况选择哪一种方式。

4. 深挖多例模式应用场景?

在Spring中,prototype原型模式(多例模式)使用的场景不多,只有当你的bean的属性中会有数据存在的时候,才需要使用原型模式,否则数据就串了。我自己使用过的一个场景是用EasyExcel实现导入功能的时候会使用到。
在使用EasyExcel读取表格文件时,官方文档推荐的是自己进行new一个Listener对象,但是想在这个对象中使用其他service对象的话,就不能使用@Autowired了,因为这个Listener对象并不受容器管理。其中Listener对象中用到的其他service或者DAO类通过构造方法初始化进去,如果直接用@Autowired注入会报空指针错误,项目中代码如下:
Controller代码:
Java多例Bean的应用场景-easyExcel导入
Listener代码:
Java多例Bean的应用场景-easyExcel导入

我们可以考虑将这个Listener对象变成多例模式,加上@Component和@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)两个注解:
Java多例Bean的应用场景-easyExcel导入
然后在Controller里面通过Spring容器获取这个对象(注意:一定要通过容器手动获取,prototype原型模式的bean如果还通过@Autowired的形式注入的话,这个对象还是同一个,因为@Autowired只会注入一次)

调用方通过Spring注入的方式自动注入EmployeeHouseImportListener,而非new的方式,这样获取到的EmployeeHouseImportListener是被Spring容器管理的,进而可以在EmployeeHouseImportListener中通过@Autowired的方式成功获取到同样被Spring容器管理的UserService,因为UserService 的实现类中有"@Service"注解标记。文章来源地址https://www.toymoban.com/news/detail-411610.html

//调用方
EmployeeHouseImportListener importListener = SpringUtils.getBean("employeeHouseImportListener");

到了这里,关于Java多例Bean的应用场景-easyExcel导入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring——Bean注入几种方式(放入容器)

    个人博客: 全是干货,相信不会让你失望 1.XML方式注入 在现在这个Springboot横行的年代,以XML来注入的方式可能已经不多见了,因为压根用不着,但毕竟是注入方式之一也得提一提,这种方式就是依赖于XML的解析来获取我们需要注入的Bean对象 常见的方式有:set方法注入、构

    2024年02月01日
    浏览(44)
  • 将Bean注入Spring容器的五种方式

    将bean放入Spring容器中有哪些方式? 我们知道平时在开发中使用Spring的时候,都是将对象交由Spring去管理,那么将一个对象加入到Spring容器中,有哪些方式呢,下面我就来总结一下 这种方式其实也是我们最常用的一种方式,@Configuration用来声明一个配置类,然后使用 @Bean 注解

    2024年02月05日
    浏览(35)
  • 一文道破将bean注入到Spring中的几种方式

    前言: 前两天有学妹问我如何将bean注入到Spring中,虽问题较简单,但还是写此文以告之。 在Java的Spring框架中,将bean注入到容器中是核心概念之一,这是实现依赖注入的基础。Spring提供了多种方式来将bean注入到容器中。 写此文,同时也希望这篇文章能帮助到各位路过的大佬

    2024年04月15日
    浏览(48)
  • Spring中Bean的生命周期以及Bean的单例与多例模式

    bean的生命周期可以表达为:bean的定义➡bean的初始化➡bean的使用➡bean的销毁 1)通过XML、Java annotation(注解)以及Java Configuration(配置类) 等方式加载Bean 2)BeanDefinitionReader:解析Bean的定义。在Spring容器启动过程中, 会将Bean解析成Spring内部的BeanDefinition结构; 理解为:将

    2024年02月12日
    浏览(36)
  • spring(1):基于XML获取Bean对象以及各种依赖注入方式

    1.1 根据id获取 1.2 根据类型获取 1.3 根据id和类型获取 注意: 当根据类型获取bean时,要求IOC容器中指定类型的bean有且只能有一个。 例如以下XML文件,当IOC容器中一共配置了两个,根据类型获取时会抛出异常。 根据类型来获取bean时,在满足bean唯一性的前提下,其实只是看:

    2024年01月25日
    浏览(47)
  • 4.3---Spring框架之Spring中bean的注入方式---(深入版本)

    Spring基于xml注入bean的几种方式: set()方法注入; 2.构造器注入:①通过index设置参数的位置;②通过type设置参数类型; 静态工厂注入; 实例工厂; Spring IOC注入方式用得最多的是(1)(2)种; 注意:通过Spring创建的对象默认是单例的,如果需要创建多实例对象可以在标签后面添

    2023年04月10日
    浏览(43)
  • JAVA实现easyExcel批量导入

    注解 类型 描述 ExcelProperty 导入 指定当前字段对应excel中的那一列。可以根据名字或者Index去匹配。当然也可以不写,默认第一个字段就是index=0,以此类推。千万注意,要么全部不写,要么全部用index,要么全部用名字去匹配。千万别三个混着用,除非你非常了解源代码中三个

    2024年04月27日
    浏览(40)
  • Spring的生命周期及Spring Bean单例和多例---超详细教学

        一个Bean对象从被Spring 容器创建到被销毁的整个过程 。Spring框架对Bean对象的生命周期进行了管理,提供了灵活性和控制权,让开发人员能够在不同的阶段进行自定义操作 1.2.1 定位和解决问题      对象的生命周期可以帮助我们 准确定位和解决程序中的问题 。当程序出现

    2024年02月11日
    浏览(34)
  • Java 使用 EasyExcel 实现导入导出(新手篇教程)

    官网镇楼↓,觉得我写的不好的同学可以去官网看哦 EasyExcel 示例: 如上一个简易 Excel 表格,表头占了两行,且第三列开始才为有效数据,那么我们应该如何导入? 建造实体类 首先无论是导入还是导出,都需要先建对应的实体类  如图所示,因为我的示例 Excel 一共需要读

    2024年04月17日
    浏览(41)
  • 探究Spring Bean的六种作用域:了解适用场景和使用方式

    主要对单例作用域与原型作用域进行重点说明,其余四个了解即可 单例作用域一般是默认的Bean作用域。Spring容器在第一次获取Bean时创建实例,并在后续请求中返回同一个实例。 例如: 我们现在创建一个公共的Bean供用户一与用户二使用,用户一再使用完后对其内容进行修改

    2024年02月15日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包