Frühjahr autowired bean bewirkt, dass null-Zeiger

Ich habe eine logger-Klasse, macht Gebrauch von einem Dienst. Jedes mal, wenn ein neuer logger erstellt wird, erwarte ich, haben Zugriff auf die singleton-scoped logging service.

Ich autowire die logging-service in den logger jedoch einen null-Zeiger-Ausnahme zurückgegeben. Ich habe versucht, ein paar Lösungen:

  1. manuell definieren die bean im Anwendungskontext,
  2. Versuchen, um den logger zu Feder geschafft aber das führte zu mehr Problemen.

Ich bin versucht, diese zu arbeiten in meinem junit-tests, und ich geben Sie die Kontext-Datei zu machen, verwenden Sie einen anderen Anwendungskontext. Jedoch auch, wenn immer identisch, es löst nicht das Problem.

Finden Sie folgenden code:

Folgende ist ein Auszug aus dem Anwendungskontext.

<context:component-scan base-package="com.platform"/>
<bean id="asyncLoggingService" class="com.platform.services.AsyncLoggingServiceImplementation" scope="prototype"/>

Folgenden ist die Logger-Klasse.

package com.platform.utils;


import com.platform.services.AsyncLoggingService;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

public class OurLogger
{

  private static Logger logger;

  @Autowired
  private AsyncLoggingervice asyncLoggingService;

  public OurLogger(Class Clazz)
  {
    logger = LoggerFactory.getLogger(Clazz);
  }


  public void trace(TraceableObject object, String message)
  { 
    //Do nothing yet
  }

}

Ich dann nutzen Sie den Logger in einen anderen Dienst, um zu melden, was Los ist. (Der Grund, warum ich Schreibe, ein anderer logger ist eine RabbitMQ-server) In der service, den ich instanziiert eine neue Instanz des Loggers und dann verwenden Sie es entsprechend.

@Service
public class AsyncAccountServiceImplementation implements AsyncAccountService
{
  private static final String GATEWAY_IP_BLOCK = "1";

  private static OurLogger logger = new      OurLogger(AsyncAccountServiceImplementation.class);

...
}

Den null-Zeiger tritt in den OurLogger wenn ich versuche, rufen eine Methode in der asyncLoggingService.

Ich dann versuche zu testen, die AsyncAccountService mit JUnit. Ich sicherstellen, dass Sie die verschiedenen Anwendungs-Kontext, aber es scheint immer noch zu Folge, dass das null-Zeiger-Ausnahme.

Wenn Sie weitere Informationen benötigen, bitte lassen Sie mich wissen. Ich habe gesehen, Wege, dies zu beheben, aber Sie scheinen nicht zu arbeiten, so vielleicht habe ich irgendwo einen Fehler gemacht oder ich bin nicht verstehen, dieses alles ist ganz richtig.

  • Wie soll der Frühling autowire eine Instanz, die es nicht kennen. Erstellen Sie neue Instanzen von sich selbst in der Erwägung, dass Sie sollte benutzen, die es geschafft bis zum Frühjahr.
  • Soweit ich informiert bin (und bitte korrigiert mich wenn ich falsch bin, wie ich wohl bin) die Bohne ist in der Anwendung angegebenen Kontext und dann (mit dem gleichen Namen) in der OurLogger Instanz. Die einzige graue Fläche, die ich dort sehen, ist die Erstellung der neuen OurLogger Instanz, aber sicher muss es sein, ok ist ein autowired-service innerhalb einer Instanz von einem Objekt wie diesem. Vielen Dank für Ihren Kommentar so weit.
  • Nein, es ist nicht... Das wird nur arbeiten für das Frühjahr definiert und managed beans. Sobald Sie eine new OurLogger nichts passieren. Es sei denn, Sie verwenden AspectJ kombiniert mit @Configurable.
  • Aber nur aus Neugier, warum nicht erstellen Sie einfach eine appender für Ihre logging-framework? So einfach können Sie SLF4J in Ihren code und haben einen RabbitMQ basiert appender (Logback oder Log4j), um die eigentliche Anmeldung.
  • Ok danke, das macht Sinn. Ich werde einen tieferen Einblick in nun konfigurierbar. Wie für Ihre appender Vorschlag. Das macht großen Sinn. Es vielleicht zu vereinfachen, was ich Tue im moment.
  • Es wird stark vereinfacht sind, was Sie tun. Spring AMQP bietet eine Implementierung Log4j (und ich habe nur registriert, ein Problem für eine Logback ein 🙂 ).
  • Auf jeden Fall wird in diesem Blick, aber ich immer noch wollen, um dieses problem zu lösen, auch wenn es nur um etwas neues zu lernen, damit ich nicht einen Fehler machen, wie Sie diese wieder ein. Vielen Dank für die Anregungen und Hilfe!

Schreibe einen Kommentar