Это, безусловно, круговая зависимость.Вы должны увидеть BeanCurrentlyInCreationException
, брошенный Spring.
На бины нельзя ссылаться, когда они уже созданы.Проблема заключается в том, что вы используете инжектор конструктора для создания ваших bean-компонентов.
Я вижу две вещи, которые могут это исправить.
- На основе имени пакета
DiameterClient
Я предполагаю, что это класс, который вы контролируете.Я бы порекомендовал автоматическое подключение всех зависимостей этого класса, как у вас с xxxHandler
классами.Вы даже должны иметь возможность @Autowired
a List<DiameterMessageHandler>
, и Spring загрузит все bean
s, которые реализуют этот интерфейс, в список. - Используйте внедрение на основе свойств для ваших bean-компонентов (вместо * 1016)* элемент, используйте элемент
property
).
РЕДАКТИРОВАТЬ:
Если у вас есть ваши файлы выглядит примерно так:
<bean id="diameterClient" class="com.rory.ptspsim.diameterclient.DiameterClient" scope="singleton" init-method="start"/>
<bean id="asrHandler" class="com.rory.ptspsim.messagereceivers.ASRHandler"/>
<bean id="aaaHandler" class="com.rory.ptspsim.messagereceivers.AAAHandler"/>
<bean id="ceaHandler" class="com.rory.ptspsim.messagereceivers.CEAHandler"/>
<bean id="dwaHandler" class="com.rory.ptspsim.messagereceivers.DWAHandler"/>
<bean id="staHandler" class="com.rory.ptspsim.messagereceivers.STAHandler"/>
и это:
public class DiameterClient {
@Autowired
private List<DiameterMessageHandler> handlers;
@Value("${pcca.host}")
private String host;
@Value("${pcca.port}")
private int port; // or String...
// I don't know what these other two would be...if they are autowired, or just values you would populate...
private String somePackage;
private String anotherPackage;
// methods go here...
}
, тогда List<DiameterMessageHandler>
будет содержать 5 bean-компонентов, которые вы определили для вашего bean-компонента DiameterClient в xml.Если порядок важен, вам может потребоваться указать их в вашем контексте в определенном порядке, но в противном случае он должен просто работать.
Вы можете даже пойти дальше и аннотировать свои классы аннотацией стереотипа (@Component
, скорее всего) и выполните context:component-scan
для пакетов, содержащих эти классы.Это будет означать еще меньше декларации xml.