2017-08-28 3 views
0

Ich versuche, eine Klasse in eine andere Klasse zu injizieren und während des Post-Konstrukts funktioniert die eingefügte Klasse wie erwartet und wenn ich versuche, diese Klasse in anderen Methoden zu verwenden, wird ein Nullzeiger ausgelöst.Spring Inject lädt Klasse nur während postConstruct

Wenn Sie den folgenden Code sehen, in meiner Service-Klasse sehe ich die Postconstruct-Methode druckt den erwarteten Wert aus der Karte. aber die Saidhello-Methode würde eine NPE werfen.

Was ist in der unten falsch ist (der Code wird nicht kompilieren ... wollte nur, dass auf einem hohen Niveau setzen)

@RestController 
@Produces(MediaType.APPLICATION_JSON) 
@RefreshScope 
public class ServRes{ 

@Inject 
ServiceFact service; 

@RequestMapping("/test") 
public Response helloWorld(){ 
Service myservice = service.getService(); 
myservice.sayHello(); 
} 

Mein ServiceFact

@Named 
public class ServiceFact{ 

public Service getService(){ 
return new Service(); 
} 

Mein ServiceClass

@Named 
public class Service{ 

private HashMap dict; 

@Inject 
Private DictLoader dicLoader 

@PostConstruct 
public void load(){ 
this.dict = dicLoader.getDict(); 
dict.get("1"); // prints 12212 
} 

public void sayHello(){ 
System.out.print(dict.get("1")); //throws NPE 
} 

} 

Antwort

0

Das Problem ist mit der

@Named 
public class ServiceFact{ 

public Service getService(){ 
return new Service(); 
} 

Sie erstellen ein neues Objekt und verwenden die Spring Bean nicht. Erwägen Sie, die Factory umzuformen, um die erstellte Spring Bean (Inject) zu verwenden.

Verwandte Themen