2017-12-19 2 views
0

Ich habe eine @ Service Klasse, die von einer Webanforderung aufgerufen wird.Wie @Autowired Objekte innerhalb einer Liste initialisiert werden, die einen Konstruktor haben

Es hat einen Konstruktor, der die Liste der Objekte eine implementierten Art einen Konstruktor hat Dies funktioniert wie beabsichtigt, außer wenn eines der Elemente in der Liste

private List<Interface> interfaceServices; 

@Autowired 
public ValidateInterfaceService(List<Interface> interfaceServices) { 
    this.interfaceServices = interfaceServices; 
} 

initialisiert.

@Service 
@Order(3) 
public class EvaluateExampleWithConstructor implements Interface { 

private LocalDate busDate; 

@Autowired 
public EvaluateExampleWithConstructor(LocalDate busDate) { 
    this.busDate = busDate; 
} 

Wenn ich versuche, und haben diese Klasse auf der Liste der Code nicht so laufen „kein Standard-Konstruktor wird gefunden“

Wenn der Wert in den Konstruktor übergeben für das Verfahren benötigt wird, wie ich dies tun initialisieren richtig auflisten?

+3

Das sollte nicht wichtig sein. Ich denke, das Hauptproblem ist, dass Sie keine Bohne vom Typ 'LocalDate' haben, die dafür sorgen würde, dass die Bohne tatsächlich konstruiert werden kann. –

+0

Eine Bean innerhalb der ValidateInterfaceService-Klasse? @Autowired LocalDate busdate; ? –

+0

Nein in Ihrem Anwendungskontext. Sie haben '@ Autowired' für Ihren Konstruktor, daher muss eine Bean vom Typ' LocalDate' als gültige Bean erstellt werden. –

Antwort

0

Ihr Problem wird durch die private LocalDate busDate verursacht, die keine Bean im Kontext ist. Sie können eine LOCALDATE zur Injektion wie folgt erstellen:

@Configuration 
public class FooConfiguration { 

    @Bean 
    public LocalDate busDate() { 
     return ... 
    } 

} 

Hinweis dies eher komisch aussieht, und man könnte auf eine andere Weise besser Initialisierung dieses Datums sein, je nach Anwendungsfall, e.q. mit @Value.

Verwandte Themen