我有@Autowired必须从静态方法中使用的服务。我知道这是错误的,但是我无法更改当前的设计,因为这需要大量的工作,因此我需要一些简单的技巧。我不能更改randomMethod()为非静态的,而需要使用此自动装配的bean。有什么线索怎么做?
@Autowired
randomMethod()
@Service public class Foo { public int doStuff() { return 1; } } public class Boo { @Autowired Foo foo; public static void randomMethod() { foo.doStuff(); } }
您可以通过执行以下解决方案之一来做到这一点:
这种方法将构造需要一些bean作为构造函数参数的bean。在构造函数代码中,您可以将静态字段的值设置为构造函数执行的参数。样品:
@Component public class Boo { private static Foo foo; @Autowired public Boo(Foo foo) { Boo.foo = foo; } public static void randomMethod() { foo.doStuff(); } }
这里的想法是在通过spring配置bean之后将bean移交给静态字段。
@Component public class Boo { private static Foo foo; @Autowired private Foo tFoo; @PostConstruct public void init() { Boo.foo = tFoo; } public static void randomMethod() { foo.doStuff(); } }