返回顶部
首页 > 资讯 > 精选 >spring中bean注入无效怎么解决和new创建对象的区别是什么
  • 860
分享到

spring中bean注入无效怎么解决和new创建对象的区别是什么

2023-06-29 07:06:22 860人浏览 安东尼
摘要

这篇文章主要介绍“spring中bean注入无效怎么解决和new创建对象的区别是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“spring中bean注入无效怎么解决和new创建对象的区别是什么”

这篇文章主要介绍“spring中bean注入无效怎么解决和new创建对象的区别是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“spring中bean注入无效怎么解决和new创建对象的区别是什么”文章能帮助大家解决问题。

bean注入无效和new创建对象区别

注意!如果直接new的话,类里面的autowire将不生效

项目中用到如下代码

然后 在运行的时候发现 通过 @Autowired注入的对象 capitalDetailDOMapper和 excelRecordDOMapper的值为null

public class ExcelListener extends AnalysisEventListener<List> {@Autowiredprivate CapitalDetailDOMapper capitalDetailDOMapper;@Autowiredprivate ExcelRecordDOMapper excelRecordDOMapper;…}

刚开始以为是ExcelListener没有加bean扫描注解导致的

于是加上后

@Componentpublic class ExcelListener extends AnalysisEventListener<List> {@Autowiredprivate CapitalDetailDOMapper capitalDetailDOMapper;@Autowiredprivate ExcelRecordDOMapper excelRecordDOMapper;…}

结果在运行的时候,两个mapper,仍然为null。

检查代码发现

在ExcelListener这个类的使用场景中,是 ExcelListener excelListener= new ExcelListener(); 创建的对象

spring中bean注入无效怎么解决和new创建对象的区别是什么

这里就明白了, 手动通过new创建和通过spring容器创建管理对象是不一样的,手动new的对象,内部用@autowire注解是无效的。

若让该autowire生效,则需要通过容器来管理对象

改造如下,先给ExcelListener加上注解@Component

@Scope(“prototype”)@Component(“excelListener”)public class ExcelListener extends AnalysisEventListener<List> {@Autowiredprivate CapitalDetailDOMapper capitalDetailDOMapper;@Autowiredprivate ExcelRecordDOMapper excelRecordDOMapper;…}

这样 这个bean就会被加载到spring容器中,这里Scope表示bean的作用范围,spring默认创建的对象是单例的

prototype是非单例,这里我主要是想在不同的线程里面创建不同的ExcelListener实例。

可以通过容器获取bean,也可以直接@autowire

ExcelListener excelListener= SpringBeanUtils.getBean(“excelListener”);

其中SpringBeanUtils为实现了BeanFactoryPostProcessor接口的实现类

能够从spring容器里面获取到bean的实例,如果bean是非单例的 每次则获取到是一个新的bean

@Component@Getterpublic class SpringBeanUtils implements BeanFactoryPostProcessor {private static ConfigurableListableBeanFactory beanFactory;public static T getBean(String beanName) {return (T) beanFactory.getBean(beanName);}public static T getBean(Class beanClz) {return beanFactory.getBean(beanClz);}@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {SpringBeanUtils.beanFactory = beanFactory;}}

注意!!如果A类是单例的,那么A类中的成员B类声明为非单例的,也是无效的。

因为只有A类的一个实例,里面包含的B类的实例也只有一个。 除非能再次创建A类的实例,才能创建出另一个B类的实例对象。

bean交个spring和new比较区别

在spring的配置文件中我们要使用DataSource这个对吧

这个bean将会被多个bean引用   通过ref="dateSource"这个引用  当我们要修改这个只要修改引用就好了  不需要修改很多了  

主要是解耦

比如你有一个A类 在好几个类里边要调用到A的方法 new的话就要在每个类里都new A()

spring的话 只要配置一个bean进行注入就够了。

哪天你不用A类了 改成B了~ 直接把bean里边的class改成B就搞定了

如果用new的话 要改好几个地方~

关于“spring中bean注入无效怎么解决和new创建对象的区别是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: spring中bean注入无效怎么解决和new创建对象的区别是什么

本文链接: https://lsjlt.com/news/323423.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • spring中bean注入无效怎么解决和new创建对象的区别是什么
    这篇文章主要介绍“spring中bean注入无效怎么解决和new创建对象的区别是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“spring中bean注入无效怎么解决和new创建对象的区别是什么”...
    99+
    2023-06-29
  • 详谈spring中bean注入无效和new创建对象的区别
    目录bean注入无效和new创建对象区别项目中用到如下代码检查代码发现bean交个spring和new比较区别主要是解耦bean注入无效和new创建对象区别 注意!如果直接new的话...
    99+
    2024-04-02
  • new中无法使用@autowired进行对象bean注入怎么解决
    这篇文章主要介绍“new中无法使用@autowired进行对象bean注入怎么解决”,在日常操作中,相信很多人在new中无法使用@autowired进行对象bean注入怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希...
    99+
    2023-06-29
  • spring是如何注入对象的和bean创建过程分析
    首先需要知道一个大致实现● 这个注入过程肯定是在 BeanPostProcessor 中实现的●spring 是在 beanFactory.getBean 进行 bean 实例化的,即懒加载● 根据第二条,也就是说在 getBean 的时候...
    99+
    2019-05-21
    java教程 spring 注入对象 bean
  • spring中IOC控制反转依赖注入和new对象的区别说明
    目录IOC控制反转依赖注入和new对象的区别new对象依赖注入spring的IOC容器比New对象究竟好在哪IOC控制反转依赖注入和new对象的区别 spring默认是单例模式的,依...
    99+
    2024-04-02
  • SpringBoot在容器中创建@Component和@bean的区别是什么
    本篇内容介绍了“SpringBoot在容器中创建@Component和@bean的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!@...
    99+
    2023-07-05
  • Spring注解中@Configuration和@Component的区别是什么
    本文小编为大家详细介绍“Spring注解中@Configuration和@Component的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring注解中@Configuration和@Component的区别是什么”文章能...
    99+
    2023-07-05
  • netty中spring对象注入失败怎么解决
    本文小编为大家详细介绍“netty中spring对象注入失败怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“netty中spring对象注入失败怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。net...
    99+
    2023-06-29
  • Java Spring中各依赖注入注解的区别是什么
    本篇文章给大家分享的是有关Java Spring中各依赖注入注解的区别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Spring对于Be...
    99+
    2024-04-02
  • SpringBoot对不同Bean注解的区别和使用场景是什么
    这篇文章主要讲解了“SpringBoot对不同Bean注解的区别和使用场景是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot对不同Bean注解的区别和使用场景是什么”吧...
    99+
    2023-07-05
  • Spring中@Autowired、@Resource和@Inject注解的区别是什么
    这篇文章主要介绍了Spring中@Autowired、@Resource和@Inject注解的区别是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Spring中@Autowired、@Resource和@I...
    99+
    2023-07-05
  • 数组和对象在 PHP 中的区别是什么?
    php 中,数组是有序序列,以索引访问元素;对象是具有属性和方法的实体,通过 new 关键字创建。数组访问通过索引,对象访问通过属性/方法。数组值传递,对象引用传递。 数组 数组是一个...
    99+
    2024-04-29
    php 对象
  • JavaScript中创建对象的三种方式分别是什么
    JavaScript中创建对象的三种方式分别是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Javascript中的一切几乎都是对象,...
    99+
    2024-04-02
  • CSS中block级和inline级对象的区别是什么
    这篇文章将为大家详细讲解有关CSS中block级和inline级对象的区别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。CSS中block级和inli...
    99+
    2024-04-02
  • php出现new对象失败的原因是什么及怎么解决
    本篇内容介绍了“php出现new对象失败的原因是什么及怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、new对象失败原因new对象...
    99+
    2023-07-05
  • Spring Boot中单例类实现对象的注入方式是什么
    本篇内容介绍了“Spring Boot中单例类实现对象的注入方式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Spring Boot ...
    99+
    2023-06-20
  • Spring中@Service注解的作用与@Controller和@RestController之间区别是什么
    本篇内容介绍了“Spring中@Service注解的作用与@Controller和@RestController之间区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!...
    99+
    2023-07-05
  • sql表对象无效的原因及解决方法是什么
    SQL表对象无效的原因可能有以下几种:1. 表对象不存在:如果使用的表对象在数据库中不存在,就会导致无效。可能是表名拼写错误或者表在...
    99+
    2023-08-09
    sql
  • 异步编程中Java文件和对象的区别是什么?
    在Java异步编程中,文件和对象是两个常见的概念。虽然它们在某些方面相似,但在其他方面却有很大的不同。本文将介绍Java异步编程中文件和对象之间的区别,并提供一些示例代码来帮助您更好地理解这些概念。 Java文件 Java文件是一个存储在...
    99+
    2023-07-07
    文件 异步编程 对象
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作