2017-12-13 7 views
0

Ich bin mir nicht sicher, ob es funktioniert, wir haben ein Projekt, das eine Datei .txt lädt, das sind Benutzer, die auf früheren Bereitstellungen erstellt wurden. Das Problem war, dass die Applicationcontext nicht geladen wurde, und wirft NullPointerException, da das Verfahren, das die Datei lädt wird @Autowired und das ist, was ich habe versucht, es zu lösen:Fügen Sie Listener spring web hinzu, nachdem Applicationcontext geladen wurde

import org.springframework.context.ApplicationEvent; 
import org.springframework.context.ApplicationListener; 
import org.springframework.stereotype.Component; 

@Component 
public class TestListener implements ApplicationListener{ 

    @Override 
    public void onApplicationEvent(ApplicationEvent event) { 
    } 
} 

ist dies die web.xml für das Projekt und der Hörer:

<listener> 
    <listener-class>TestListener</listener-class> 
</listener> 

Der Punkt ist, einen Hörer zu erstellen, ist das korrekt?

+1

Wie meinen Sie „die Application wurde nicht geladen“? Was "sagt NullPointerException"? Welche Frühlingsversion ist das? Hast du das gesehen: https://spring.io/blog/2015/02/11/besser-applikations-events-in-spring-framework-4-2? – daniu

+0

Der Kontext der Anwendung wurde nicht geladen, wenn die Autowired-Methode aufgerufen wurde und der Kontext an der Stelle null war, an der die Methode ausgelöst wurde. Ich verwende spring 4.0.5 –

+0

Sie sollten den Stack-Trace posten –

Antwort

0

zwei Möglichkeiten in den Sinn kommen:

InitializingBean:

@Component 
public class FileLoader implements InitializingBean { 
    public void afterPropertiesSet() throws Exception { 
     // load file 
    } 
} 

Dies sollte nach der Kontext geladen wurde aufgerufen.

@PostConstruct:

@Component 
public UserService { 
    private List<Customer> registeredCustomers; 
    // ... 

    @PostConstruct 
    public void loadPreviouslyRegisteredUsers() { 
     registeredCustomers = loadFile(); 
    } 
} 

Ich mag diese besser; Die @ PostConstruct-Methode wird aufgerufen, nachdem die Servicebohne erstellt wurde. Dies ist die beste Möglichkeit, die Datei zu laden.

Es tut uns leid, wenn dies nicht wirklich Ihre Frage über die ApplicationContextListener beantwortet, aber es klingt wie das ist, was Sie versuchen zu tun.

+0

Der Punkt ist zu Erstellen Sie einen Listener, um sicherzustellen, dass nach dem 'ApplicationContext' keine Brände ausgelöst werden. Danke für deine Antwort! –

Verwandte Themen