Действительно, это будет намного проще, если B будет также управляется Spring и вместо того, чтобы обеспечить статические методы будут вводиться в классы, где это необходимо.
Теперь, если вы все равно должны продолжать свой подход: Вы можете использовать статический метод инициализации вместо статического блока, скажем
class B{
private static A beanA;
public static void setBeanA(A bean){
beanA = bean;
}
}
Теперь все, что вам нужно сделать, это вызов, чтобы убедиться, что этот набор вызывается во время создания контекста. Самый простой способ - создать еще один класс и объявить его как bean-компонент, или вы можете заставить этот метод-метод возвратить что-то и использовать его фабричным методом или автоподвести A к нему и использовать некоторую пост-обработку - что бы вы больше не хотели. Вот пример с использованием другой боб:
public class C{
public C(A bean){
B.setBeanA(bean);
}
}
чем в весеннем конфигурации вы можете иметь:
<bean name="A" class="A.class"/>
<bean class="C.class">
<constructor-arg ref="A"/>
</bean>
Заметим, что вместо прохождения боб, вы можете использовать тот же подход, чтобы пройти весь ApplicationContext ,
В целом, это очень шаткий подход, и он предполагает, что контекст Spring будет происходить до того, как что-то начнет происходить в приложении.
Это ужасное требование. Только не делай этого. –
Что такое ctx? (Я имею в виду, откуда вы его взяли?) – Roman