千家信息网

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

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要介绍"spring中bean注入无效怎么解决和new创建对象的区别是什么"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"spring中bean注入无
千家信息网最后更新 2025年11月08日spring中bean注入无效怎么解决和new创建对象的区别是什么

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

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

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

项目中用到如下代码

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

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

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

于是加上后

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

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

检查代码发现

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

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

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

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

@Scope("prototype")@Component("excelListener")public class ExcelListener extends AnalysisEventListener {@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创建对象的区别是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

对象 实例 容器 不同 注解 知识 代码 只有 手动 方法 时候 是非 行业 管理 运行 配置 实用 不用 两个 中用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 天津外贸行业进口软件代理服务器 荆州定制软件开发电话 现在软件开发都用什么编译器 数据库连接池net 掌握一门可以挣钱网络技术 扁头猛蚁数据库 浩扬瀚软件开发工作室 塔式服务器T640散热片拆出 网络安全作文100字的图 穿越火线和服务器连接不上 it软件开发实施合同 数据库数据太大删除不了 上海数据网络技术咨询技术指导 抖店服务器繁忙怎么回事 下面那条属于网络安全工作 数据库的管理系统的基本功能 数据库怎么查同学过生日 企业云服务器什么意思 常用的服务器对应端口号 软件开发各角色之间的关系 铁路网络技术专业就业方向 服务器由哪个机构管理 怎么matlab做软件开发 医院网络安全检查自查 计算机三级网络技术 贴吧 自己建数据库投入多少 数据库有没有做外键约束 浙江企业软件开发服务商 cad中的模块数据库 揭阳智慧餐饮软件开发
0