解决使用@Autowired导入静态对象的实例时出现为null的情况



  好久没写csdn博客了,今年4月份刚换了一份工作,所以从那时到现在一直特别忙,总是挤不出时间出来写博客,今天我觉得不能再拖了,一定也要挤出时间出来每周至少要写3个博客!我觉得技术需要不断分享体现出它的价值,作为一个技术人,更不用说了!

  好!废话不多说!开始步入正题!最近在写增删改查的业务代码时遇到了一个有点烦的问题,表面上看起来好像不难的样子,但是解决起来也不是很简单。这个问题就是我在写工具类时,因为工具类的method一般都是用static来修饰的,所以相关的对象或字段也需要用static来修饰,但当我理所当然地对一个静态对象使用@AutoWired自动导入它的实例时,悲剧还是发生了!大家可以看如下图:

在这里插入图片描述
  懂java的人一眼就可以看出这个mapper类肯定在这个类中做各种CUID的骚操作,但是真能得逞吗?当我使用riskCptBasicInfoMapper这个对象进行一个insert操作时还是报了一个nullpointer(空指针)的异常,乍一看原来是riskCptBasicInfoMapper这个对象为null了!!看来@Autowired这个注解是无效的!于是实在想不出解决方案的我直接在stackoverflow网站上请求大神帮助,没想到一搜还真给我提供了一个非常好的思路!如下图所示:

在这里插入图片描述
  学过spring的同学都会知道我们可以用setter的方式来将对象的实例赋予给对象,于是我们可以使用@PostConstruct注解赋予静态对象dao一个实例,从而真正实例化静态对象dao。同时在用这个方法解决这个问题时需要注意如下两点:

  1. 这个类必须使用@component这个注解,代表这个类以组件的形式注册到spring容器中,从而能够被容器管理;
  2. 在通过setter方式可以实例化静态对象时,另一个赋值的对象dao0需要加上@Autowired注解。

所以根据stackoverflow的解决问题的思路,我们应当改成如下图所示的代码:


  所以至此这个问题便轻轻松松地解决了!stackoverflow对这个问题的描述还是挺不错的,我把相关网址都贴出来,大家也可以看下!

Can you use @Autowired with static fields?
@autowired in static classes

  建议大家在平常编程时如果遇到自己一时解决不了问题时,建议学会在Google上使用英文关键字来搜索,这比起一直用百度搜索真得可以节省很多时间!同理,在自己自学一个新的知识点时,可以直接去相关官网阅读相关技术文档!英语不好没事!遇到不懂的单词,那就一个一个翻译,相信我!读个习惯!你就找到阅读的那种feel了!加油!晚安!

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
静方法使用@Autowired注解,需要注意以下几点: 1. 静态方法不能直接使用@Autowired注解来注入依赖的类,因为@Autowired注解是基于实例对象的依赖注入机制。在静态方法中,无法直接访问实例变量和实例方法。 2. 如果在静态方法中需要使用被容器管理的类,可以通过将该类作为静态变量,并在静态方法中进行访问。例如,在Spring框架中,可以使用@Component注解将类标记为被容器管理的组件,然后在静态方法中通过静态变量来访问该组件。 3. 静态方法中使用@Autowired注解注入的类,需要在类加载的最后进行注入,同需要确保被注入的类也被标记为被容器管理的组件。这样才能保证在静态方法中正确地访问到被注入的实例。 总结起来,静态方法中使用@Autowired注解需要注意的是,不能直接使用@Autowired来注入依赖的类,而是需要将被注入的类作为静态变量,并在静态方法中访问该变量。同,需要确保被注入的类被标记为被容器管理的组件,以保证注入的正确性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [静态方法使用@Autowired注入](https://blog.csdn.net/wh710107079/article/details/98183733)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [@Autowired注解和静态方法](https://blog.csdn.net/weixin_34414650/article/details/93619433)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Melo_FengZhi

您的鼓励对我就是巨大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值