1

classAorのインスタンスを返すファクトリ クラスがありますclassB。これらのクラスは interface を実装しますXYZ:

   interface xyz;
   getInstance()

   @service 
   classA implements xyz{
      public void checkStatus(){
      }
   }

   @service  classB implements xyz{
      public void checkStatus(){
      }
   }

工場クラス:

   @component
   class ABCFactory{
       @Autowire classA A;
       public static getInstance(str a){
           return classA;
       }
   }

クライアントコード:

   Class A a = ABCFactory.getInstance("A");
   a.checkStatus();

null ポインター例外が発生します -- おそらくanull として返されますか?

spring アノテーションと autowired Bean を使用してファクトリ パターンを実装するための最良の方法は何ですか?

4

2 に答える 2

0

static諸悪の根源です。どうやってclassAここにアクセスできたのですか?

@Component
class ABCFactory{
   @Autowire classA A;
   public static getInstance(str a){
       return classA;
   }
}

Aメソッドが静的であるのに対し、フィールドは静的ではありませんgetInstance()-コードはコンパイルされません。

さらに、依存性注入は、staticクラスではなくインスタンスで機能します。したがって、次のものを取り除く必要がありますstatic

@Component
class ABCFactory {
   @Autowire classA A;
   public xyz getInstance(str a){
       return A;
   }
}

ABCFactory必要な場所に注入します (例: 他のサービスやコントローラー):

@Autowired
private ABCFactory factory;

ところで、あなたのデザインはSpring環境では怪しく見えますが、何を達成したいですか?

于 2012-07-09T15:49:32.627 に答える
0

Spring の設定を確認せずに自動配線が行われない理由を確実に言うのは困難です。私の最初の推測では、コンポーネントのスキャンがオンになっていないということです:

<context:component-scan base-package="org.example"/>

そのようなものをSpring構成ファイルに(正しいパッケージで)追加すると、Springはパッケージ構造をスキャンして、自動配線が必要なフィールドと、自動配線に使用できるサービスを探します。

于 2012-07-08T22:20:28.820 に答える