在做项目的时候突然有这样一个需求,在工具类中需要注入spring组件,由于工具类都是静态的直接注入或者new一个类都是不行的,因此了解了一下相关用法.
方案
首先需要将该类变成一个spring的bean,也就是在类上添加@Component注解,当然其他相关注解也可以
在类中声明一个该类的静态对象,同时也将需要注入的bean注入进来.
写一个init()方法并在上面添加@PostConstruct注解,在方法中将this赋给该类的静态对象,并且使用将依赖bean赋给静态对象的bean
使用的时候使用对象.属性即可
我的项目里是将一个自定义的文件上传路径写在配置文件中,然后在文件工具类中使用它.相关关键代码如下
@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中成功
- 上述文字皆为个人看法,如有错误或建议请及时联系我