1. 使用场景
一般需要在一个工具类中使用@Autowired 注解注入一个service。但是由于工具类方法一般都写成static,所以直接注入就存在问题。
2. 解决方法
- 方法1
@Component
public class BooUtil {
private static Foo foo;
@Autowired
public BooUtil(Foo foo) {
BooUtil.foo = foo;
}
public static void randomMethod() {
foo.doStuff();
}
}
- 方法2
@Component
public class BooUtil {
private static Foo foo;
@Autowired
private Foo tFoo;
@PostConstruct
public void init() {
BooUtil.foo = tFoo;
}
public static void randomMethod() {
foo.doStuff();
}
}
注意: 工具类上要加 @Component ,该类需要被spring管理注入
亲测方法2,可以解决,方法1没有测试