Есть ли способ использовать @Autowired
со статическими полями. Если нет, есть ли другие способы сделать это?Можете ли вы использовать @Autowired со статическими полями?
ответ
Короче говоря, нет. Весной вы не можете автоопределить или вручную провести статические поля. Для этого вам придется написать свою собственную логику.
Создайте компонент, который вы можете autowire, который инициализирует статическую переменную как побочный эффект.
@Autowired
может использоваться с сеттерами, чтобы у вас мог быть сеттер, изменяющий статическое поле.
Только один окончательное предложение ... НЕ
Вы можете достичь этого, используя XML обозначения и MethodInvokingFactoryBean
. Например, посмотрите here.
private static StaticBean staticBean;
public void setStaticBean(StaticBean staticBean) {
StaticBean.staticBean = staticBean;
}
Вы должны стремиться использовать пружинную инъекцию, где это возможно, как это рекомендуемый подход, но это не всегда возможно, поскольку я уверен, что вы можете себе представить, как не все может быть вынута из пружинного контейнера или вы возможно, имея дело с устаревшими системами.
Примечание. При таком подходе тестирование ноты также может быть более сложным.
@Component
public class NewClass{
private static SomeThing someThing;
@Autowired
public void setSomeThing(SomeThing someThing){
NewClass.someThing = someThing;
}
}
любая идея, как я могу использовать этот подход при инициализации репозитория? – kiedysktos
Init вашего autowired компонента в методе @PostConstruct
@Component
public class TestClass {
private static AutowiredTypeComponent component;
@Autowired
private AutowiredTypeComponent autowiredComponent;
@PostConstruct
private void init() {
component = this.autowiredComponent;
}
public static void testMethod() {
component.callTestMethod();
}
}
Если вы нашли старый код, делая это, это анти-паттерн. Прищурившись, наклоните голову и найдите лучший способ решить проблему. Вы будете рады, что вы это сделали. –
этот [ответ] (http://stackoverflow.com/a/3746611/409976) также полезен для '@ AutoWired' Spring' –
. Вы можете найти более подробную информацию [ответ здесь] (http://stackoverflow.com/a/ 17660550) – nmy