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"));
}
}
次に、[実行]をクリックするだけで完了です。