springboot在静态方法中调用Service,初始化了之后为什么还是null?

发布于 2022-09-13 00:58:36 字数 91 浏览 11 评论 0


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

流星番茄 2022-09-20 00:58:36

虽然题主你的代码写法各种看起来很诡异(。・∀・)ノ゙(比如有些地方意外的空了两格,以及静态方法中的代码排版炒鸡别扭,最后静态方法名没有驼峰)

但只从解决问题角度来说的话,那基本上是因为你的HwUtil没有被注入到Spring容器里嘛,也就是HwUtil还不是一个Bean,那也就基本从你们项目如何注入Bean的方式去检查咯

  1. 要不然是给HwUtil@Component注解(前提你们的Bean扫描路径包含在了HwUtil中)
  2. 要不然是在你们的@Configuration配置文件中去实现基于@Bean注解的HwUtil类型的返回方法
  3. 要不然就是你们的xml配置文件中去声明关于HwUtil<bean>标签
  4. 要不然就是你们通过FactoryBean方式去注入HwUtil
  5. 要不然就是你们通过@Import注解方式导入HwUtil这个Bean
  6. 要不然就是你们的ImportSelector实现类返回HwUtil的全类名
  7. 要不然就是你们的ImportBeanDefinitionRegistrar实现去手动注入HwUtil这个Bean

哈哈哈,基本上面这一溜检查一下,应该能找到原因

不过如果你真只是想在一个静态方法中去使用HwService,可以尝试去专门做一个BeanFactoryAware实现类去做BeanFactory的静态封装嘛,这样你就不用以后其他地方需要用静态方法中去如你所示这样使用Bean了,然后看着还这么别扭。。。BeanFactory的静态封装大致如下

@Component
public class BeanUtils implements BeanFactoryAware {

    private static BeanFactory beanFactory;

    @Override
    public void setBeanFactory(BeanFactory beanFactory) {
        BeanUtils.beanFactory = beanFactory;
    }

    /**
     * 其他你喜欢的方式获取Bean,也可以继续扩展,我只是举了个简单的例子
     * @param tClass
     * @param <T>
     * @return
     */
    public static <T> T get(Class<T> tClass) {
        return beanFactory.getBean(tClass);
    }
}

那这样之后,你的静态HwUtil静态方法就可以不用注入HwService了,可以简单这么写

public static Map getQueuel(Map map) {
     HwService hwService = BeanUtils.get(HwService.class);
     System.out.println(hwUtil);
     return null;
}

当然你觉得这样BeanUtils很麻烦,只想搞HwService这一个Bean,那你直接按照我BeanUtils中静态注入BeanFactory的方式注入HwService不就得了嘛

@Component
public class HwUtil {

    private static HwService hwService;

    @Autowired
    public void init(HwService hwService) {
        HwUtil.hwService = hwService;
    }

    public static Map getQueuel(Map map) {
        System.out.println();
        return null;
    }
}

当然前提是你得先解决哈你HwUtil没有被注入的问题哈,我这里只是简单用@Component来表示一下,你们项目的具体情况具体分析咯

大致这样叭~睡前看这一问,反而精神了~哈哈哈,债见( ̄︶ ̄)↗!

作死小能手 2022-09-20 00:58:36

静态方法不能调用非静态方变量啊

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文