9

Spring 依存性注入と MVC に関するいくつかのチュートリアルを見てきましたが、クラスを具体的にインスタンス化する方法をまだ理解していないようです。

たとえば、変数がある場合

@Autowired
ClassA someObject;

ClassAを拡張するClassBのインスタンスとしてSpringにsomeObjectを作成させるにはどうすればよいですか? someObject = new ClassB(); のように

それがSpringでどのように機能するかよくわかりません.ContextLoaderListenerは自動的にそれを行いますか、それともSpringがそれらのクラスをインスタンス化する必要があるかを正確に指定するある種の構成クラスを作成する必要がありますか? (この場合、私はチュートリアルのどこにもそれを見たことがありません) はいの場合、どのように指定し、どのように見えますか? また、web.xml などで動作するように構成するにはどうすればよいでしょうか?

4

4 に答える 4

32

あなたはこのようにそれを行うことができます:

インターフェース:

package org.better.place

public interface SuperDuperInterface{
    public void saveWorld();
}

実装:

package org.better.place

import org.springframework.stereotype

@Component
public class SuperDuperClass implements SuperDuperInterface{
     public void saveWorld(){
          System.out.println("Done");
     }
}

クライアント:

package org.better.place

import org.springframework.beans.factory.annotation.Autowire;

public class SuperDuperService{
       @Autowire
       private SuperDuperInterface superDuper;


       public void doIt(){
           superDuper.saveWorld();
       }

}

これで、インターフェイスが定義され、実装が作成され、コンポーネントとしてマークされました。ドキュメントはこちらです。あとは、自動配線に使用できるように、コンポーネントの場所をSpringに指示するだけです。

<beans ...>

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

</beans>
于 2012-12-11T07:11:24.087 に答える
1

applicationContext.xml ファイルでオブジェクトを作成するクラスのタイプを指定する必要があります。または、Spring の最新バージョンを使用している場合は@Component、そのクラスに直接アノテーションを付けることができます。xml ベースの構成を使用している場合、web.xml では、サーブレットへの context-param として xml ファイルのパスを指定する必要があります。@Service@Repository

于 2012-12-11T07:05:48.067 に答える
0

はい、インスタンスを指定する context.xml ファイルを提供する必要があります。それを ApplicationContext に渡すと、すべてのフィールドが自動配線されます。

http://alvinalexander.com/blog/post/java/load-spring-application-context-file-java-swing-application

于 2012-12-11T07:01:14.853 に答える