春の研究ノート:xmlベースの依存関係の注入

xml依存関係インジェクションに基づく単純なプロセス

最近Springbootを学び始めたところ、先生から依存関係の注入を実行する3つの方法を試すように頼まれました。注釈の構成とJavaの構成は非常に簡単ですが、このxmlは少し面倒で、比較的古く、ほとんどのオンラインチュートリアルには完全なプロセスがありません。私は、常に1枚のカードを1枚ずつ学習する初心者です。そのため、プロセス全体を実行した後、忘れてしまった場合に備えて、完全なプロセスを作成することにしました。

ディレクトリ構造

ディレクトリ構造

POJO(単純なJavaオブジェクト、実際には通常のJavaBeans)を作成します

まず、依存関係の挿入が必要な例を作成します。

特定の関数:
MovieListerクラスのmoviesDirectedByメソッドmoviesDirectedByは、指定されたディレクターのすべてのムービーを返すために使用されます。コードを以下に示します。その中で、カテゴリ映画は、映画名や映画監督などの情報を含む映画を表します。ファインダーオブジェクトは、インターフェイスMovieFinderのインスタンスです。MovieFinderインターフェースのメソッドfindAll()は、すべての映画のリストを取得するために使用されます。クラスCSVMovieFinderとInMemMovieFinderは、インターフェイスMovieFinderの2つの実装クラスであり、CSVファイル(ファイルはプロジェクトのルートディレクトリにあり、movies.csvという名前)とメモリからそれぞれ映画情報を読み取ります。

簡単に言うと、MovieListerというクラスには、ディレクターに基づいて映画を検索するためのメソッド、movieDirectedByがあります。このクラスは、MovieFinderインターフェイスを実装するCSVMovieFinderクラスまたはInMemMovieFinderクラスに依存しています。

コード

主な機能

@SpringBootApplication
public class MovieXmlApplication {
    
    

    public static void main(String[] args) throws IOException {
    
    
        ConfigurableApplicationContext context = SpringApplication.run(MovieXmlApplication.class, args);

        MovieLister movieLister = context.getBean(MovieLister.class);
        System.out.println(movieLister.moviesDirectedBy("233"));
    }

}

MovieLister

public class MovieLister {
    
    
    private final MovieFinder finder;

    public MovieLister(MovieFinder movieFinder) {
    
    
        this.finder = movieFinder;
    }

    public List<Movie> moviesDirectedBy(String director) throws IOException {
    
    
        List<Movie> movies = finder.findAll();
        return movies.stream()
                .filter(movie -> movie.getDirectorName().equals(director))
                .collect(Collectors.toList());
    }

}

InMemMovieFinder

public class InMemMovieFinder implements MovieFinder{
    
    
    List<Movie> movieList;

    public InMemMovieFinder() {
    
    
        this.movieList = new ArrayList<>();
    }
    @Override
    public List<Movie> findAll() {
    
    
        return movieList;
    }
}

MovieFinder

public interface MovieFinder {
    
    
    List<Movie> findAll() throws IOException;
}

CSVMovieFinderは面倒すぎて書くことができません。

写xml

src / main / resourcesディレクトリに新しいbeans.xmlを作成します

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">

    <bean class="com.movie.moviexml.bean.injection.movies.MovieLister">
        <constructor-arg  ref="csvMovieFinder"/>
        <!--        constructor-arg用来指定构造函数的参数-->
    </bean>

    <bean class="com.movie.moviexml.bean.injection.movies.InMemMovieFinder" name="inMemMovieFinder"/>
    <bean class="com.movie.moviexml.bean.injection.movies.CSVMovieFinder" name="csvMovieFinder"/>

</beans>

<beans>タグは最大のタグです。<bean>タグを使用して、依存関係の挿入が必要なクラスを記述します。
class属性は、指定されたクラスの完全修飾名を表します。リフレクションでオブジェクトを作成するために使用されます。デフォルトでは、引数なしのコンストラクターが呼び出されます。

クラスのコンストラクターを使用して、メンバー変数に値を割り当て、xmlファイルのBean構成を介してオブジェクトに値を割り当てます。

コンストラクタインジェクションに関連するタグ:

constructor-arg

index:指定参数在构造函数参数列表的索引位置

name:指定参数在构造函数中的名称

value:它能赋的值是基本数据类型和 String 类型

ref:它能赋的值是其他 bean 类型,且必须是在配置文件中配置过的 bean

上記のタグの説明は、SpringによるXMLベースのメソッドの使用に関するブログから引用されています。

やっと

POJOとxmlの両方が完了したら、@ImportResource("classpath:beans.xml")xml構成の使用示すためにmain関数に書き込むことを忘れないでください。

最後の主な機能は

@ImportResource("classpath:beans.xml") // xml
@SpringBootApplication
public class MovieXmlApplication {
    
    

    public static void main(String[] args) throws IOException {
    
    
        ConfigurableApplicationContext context = SpringApplication.run(MovieXmlApplication.class, args);

        MovieLister movieLister = context.getBean(MovieLister.class);
        System.out.println(movieLister.moviesDirectedBy("233"));
    }
}

次に、[実行]をクリックするだけで完了です。

おすすめ

転載: blog.csdn.net/weixin_46149121/article/details/109344201