2017-08-28 7 views
0

私はクラスを別のクラスに注入しようとしていますが、ポスト構造中に注入されたクラスは期待どおりに動作し、他のメソッドでそのクラスを使用しようとするとnullポインタがスローされます。Spring InjectはpostConstruct中にのみクラスをロードします

私のサービスクラスでは、postconstructメソッドがマップから期待値を出力しているのがわかります。 sayhelloメソッドはNPEを投げます。以下では間違っている何

(コードは文句を言わないコンパイル...ちょうどハイレベルにそれを置くことを望んでいた)

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

@Inject 
ServiceFact service; 

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

マイServiceFact

@Named 
public class ServiceFact{ 

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

マイ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 
} 

} 

答えて

0

問題があります。

@Named 
public class ServiceFact{ 

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

新しいオブジェクトを作成していますが、Spring Beanを使用していません。作成されたSpring Bean(Inject)を使用するようにファクトリをリファクタリングすることを検討してください。

関連する問題