Я пытаюсь ввести новый компонент к существующему проектуНачало Spring @Autowired и @postconstuct работа
Текущий боб
package w.x.y.z.pkgA
@Component
public class BeanA implements InterfaceA {
}
И я пытаюсь добавить новую Bean в w.x.y.z.pkgB
package w.x.y.z.pkgB
public class BeanB implements InterfaceB {
@Autowired
private BeanA beanA
@PostConstruct
public void postConstructMethod() {
//Call some method in BeanA
}
}
От BeanB
Я хочу получить информацию о BeanA
и в BeanB
Опубликовать конструкцию Хочу зарегистрировать BeanB
с BeanA
. Поэтому я хочу, чтобы позвонить BeanA
метод
И все эти пакеты упакованы в баночке и контекст весной XML является
<context:annotation-config />
<context:component-scan base-package="w.x.y.z.pkgA,w.x.y.z.pkgB" />
<bean id="beanb" clas="w.x.y.z.pkgB.BeanB"></bean>
Но во время развертывания я получаю исключение о бобе в создании государственной
Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'context': Requested bean is currently in creation: Is there an unresolvable circular reference?
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.beforeSingletonCreation(DefaultSingletonBeanRegistry.java:347)
at w.x.y.z.BeanA<init>(BeanA.java:25)
at w.x.y.z.BeanB.<init>(BeanB.java:35)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)
Я также попытался удалить @Autowired и получить объект BeanA
, используя getBeanFactory().getBean(BeanA.class)
. Но я получаю такую же ошибку.
Если я удаляю запись bean из файла xml, она будет развернута правильно, но post construct никогда не вызывается, поскольку она больше не является компонентом.
BeanA
не зависит от BeanB
. Нет ссылок?
Есть ли способ получить это @Autowired
и @PostConstruct
для работы, когда 2 боба находятся в одном банке?
К сожалению, не зная, что может создать возможную циклическую ссылку. Одна заключительная мысль: удалите явное определение bean-компонента в вашем файле контекста, добавьте аннотацию '@ Component' к bean-компоненту, поскольку она уже находится в области сканирования компонентов, и пусть весна делает все возможное :) (удалил мой вводящий в заблуждение ответ) – meistermeier
отправляя его здесь, я попробовал. Но не повезло –