2

Spring 3 を使用する JPA アプリケーションがあります。 @PostConstuct を使用して、特定の施設コードでデータベースを初期化しようとしています。@PostConstuct メソッドを持つクラス内にコードを永続化すると、機能します。コードを永続化するために 2 番目のクラスを呼び出すと、失敗します。これは @Autowired アノテーションの使用方法と関係がありますか?

これは Preloader クラスの一部です。

public class Preloader {
   @Autowired
   private FacilityService service;

   @PostConstruct
   public void init() {
      loadCodeSet();
   }

   private void loadCodeSet() {
      // This works
      Facility created = new Facility();
      created.setCode("Uni");
      created.setDescription("University");

      Facility returned = service.create(created);

      // This fails
      CodeSetLoader cl = new CodeSetLoader();
      l.load();
    }

これは、ロード クラスの一部です。

public class CodeSetLoader {

    @Autowired
        private FacilityService facilityService;

    public void load() {
        loadFacilities();
    }

    private void loadFacilities() {
        Facility test = new Facility();
        test.setCode("UNI");
        test.setDescription("University");

        Facility returned = facilityService.create(test);
    }

例外には以下が含まれます。

Caused by: java.lang.NullPointerException
    at util.CodeSetLoader.loadFacilities(CodeSetLoader.java:42)
    at util.CodeSetLoader.load(CodeSetLoader.java:24)
    at util.Preloader.loadCodeSet(Preloader.java:68)
    at util.Preloader.init(Preloader.java:32)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:344)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:295)
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:130)
    ... 22 more

誰かがこれを手伝ってくれることを願っていますか?

4

4 に答える 4

3

@Autowired@PostConstruct、および友人は、呼び出したオブジェクトではなく、マネージド Bean でのみ機能しますnew。Spring が Bean を認識していない場合、自動配線できません。

于 2013-10-14T05:52:14.130 に答える