2 个回答

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

但只从解决问题角度来说的话,那基本上是因为你的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来表示一下,你们项目的具体情况具体分析咯

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题