Spring boot 在静态类中注入spring组件

时间:2022-07-25
本文章向大家介绍Spring boot 在静态类中注入spring组件,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在做项目的时候突然有这样一个需求,在工具类中需要注入spring组件,由于工具类都是静态的直接注入或者new一个类都是不行的,因此了解了一下相关用法.

方案

  1. 首先需要将该类变成一个spring的bean,也就是在类上添加@Component注解,当然其他相关注解也可以
  2. 在类中声明一个该类的静态对象,同时也将需要注入的bean注入进来.
  3. 写一个init()方法并在上面添加@PostConstruct注解,在方法中将this赋给该类的静态对象,并且使用将依赖bean赋给静态对象的bean
  4. 使用的时候使用对象.属性即可

我的项目里是将一个自定义的文件上传路径写在配置文件中,然后在文件工具类中使用它.相关关键代码如下

@Component
public class FileUtil {

    private static FileUtil fileUtil;

    @Autowired
    private ProjectProperties projectProperties;

    @PostConstruct
    public void init() {
        fileUtil = this;
        fileUtil.projectProperties = this.projectProperties;
    }

    /**
     * 获取图片根目录
     *
     * @return
     */
    public static String getImgBasePath() {
        String os = System.getProperty("os.name");
        String basePath;
        if (os.toLowerCase().startsWith("win")) {
            basePath = "D:/projectdev/image/";
        } else {
            basePath = fileUtil.projectProperties.getFilePathProperties().getBasePath();
        }
        basePath = basePath.replace("/", SEPERATOR);
        return basePath;
    }
}

以上就可以实现在静态类中注入依赖了.

注:

  • 上述测试在ubuntu16.04 lts jdk1.8 spring boot 1.5.6.RELEASE中成功
  • 上述文字皆为个人看法,如有错误或建议请及时联系我