Ich habe das folgende Szenario, in dem ich in Null-Zeiger-Ausnahme ausgeführt werde, weil Bean nicht initialisiert und zu einem Fehler in meinem Server fehlgeschlagen zu booten. Es gibt einen neu eingeführten Aufruf in der Annotated-Methode PostConstruct, die fehlschlägt. Der gleiche Aufruf wird in einer anderen Methode, die nicht in PostConstruct ist, ausgeführt, die korrekt ausgeführt wird und kein Problem verursacht.Spring Bean wird nicht injiziert
@Component
@Lazy
@Primary
class Parent{
@Autowired
private DesignContextService designContextService;
@PostConstruct
private void init(){
designContextService.getMethod();// fails
}
private void someFunction(){
designContextService.getMethod();// executes successfully
}
}
}
Class DesignContextService{
@Autowired
private ContextService contextService;
public void getMethod(){
contextService.isContextCreated();
...
}
// Below classes present in another jar
class ContextService{
@Inject
public ContextAdapter contextAdapter;
public void isContextCreated(){
contextAdapter.isEstablished();// contextAdapter is null . Throws exception here
}
}
}
Fehler-Stack-Trace:
at
Caused by org.springframework.beans.factory.BeanCreationException : Error creating bean ...
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:137)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620)
Ist 'Parent' als Spring-Bean definiert? Die Abhängigkeitsinjektion funktioniert nur in Spring-Beans, nicht in anderen Klassen, die keine Spring Beans sind. Es funktioniert auch nicht, wenn Sie eine Instanz der Klasse mit 'new' erstellen; Sie müssen Spring die Bohnen verwalten lassen. – Jesper
Ja ist es. Ich werde den Beispielcode korrigieren. – jetty
'class DesignContextService' sollte auch mit' @ Service' oder '@ Component' versehen sein, damit der Frühling es richtig autowire. Vielleicht ist das dein Problem? – mingos