Processus simple basé sur l'injection de dépendances xml
Je viens de commencer à apprendre Spring boot récemment et le professeur m'a demandé d'essayer trois façons d'effectuer l'injection de dépendances. La configuration des annotations et la configuration Java sont très simples, mais ce xml est un peu gênant, c'est relativement ancien, et la plupart des tutoriels en ligne n'ont pas de processus complet, je suis un novice qui apprend toujours une carte par une carte. Donc, après avoir parcouru tout le processus, j'ai décidé d'écrire un processus complet au cas où je l'oublierais.
Structure du répertoire
Créer POJO (simple objet Java, en fait des JavaBeans ordinaires)
Créez d'abord un exemple qui nécessite une injection de dépendances.
Fonctions spécifiques:
La méthode moviesDirectedBy moviesDirectedBy de la classe MovieLister est utilisée pour renvoyer tous les films du réalisateur spécifié. Le code est indiqué ci-dessous. Parmi eux, la catégorie Film représente un film, y compris des informations telles que le nom du film et le réalisateur. L'objet finder est une instance de l'interface MovieFinder. La méthode findAll () de l'interface MovieFinder est utilisée pour obtenir une liste de tous les films. Les classes CSVMovieFinder et InMemMovieFinder sont deux classes d'implémentation de l'interface MovieFinder, qui lisent respectivement les informations de film à partir du fichier CSV (le fichier se trouve dans le répertoire racine du projet et est nommé movies.csv) et la mémoire respectivement.
Pour faire simple, une classe appelée MovieLister dispose d'une méthode de recherche de films basée sur le réalisateur: movieDirectedBy. Cette classe repose sur la classe CSVMovieFinder ou la classe InMemMovieFinder qui implémente l'interface MovieFinder.
Code
Fonction principale
@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"));
}
}
FilmLister
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 est trop difficile à écrire.
Copier xml
Créez un nouveau beans.xml dans le répertoire src / main / resources
<?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>
La balise <beans> est la plus grande balise. Utilisez la balise <bean> pour écrire des classes qui nécessitent une injection de dépendances.
L'attribut class représente le nom complet de la classe spécifiée. Utilisé pour créer des objets en réflexion. Le constructeur sans argument est appelé par défaut.
Utilisez le constructeur de la classe pour affecter des valeurs aux variables membres et attribuer des valeurs aux objets via la configuration du bean dans le fichier xml.
Tags impliqués dans l'injection du constructeur:
constructor-arg
index:指定参数在构造函数参数列表的索引位置
name:指定参数在构造函数中的名称
value:它能赋的值是基本数据类型和 String 类型
ref:它能赋的值是其他 bean 类型,且必须是在配置文件中配置过的 bean
La description de la balise ci-dessus est tirée de l'utilisation par le blog Spring de méthodes basées sur XML
Enfin
Lorsque POJO et xml sont terminés, n'oubliez pas d'écrire sur la fonction principale pour @ImportResource("classpath:beans.xml")
indiquer l'utilisation de la configuration xml.
La fonction principale finale devrait être
@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"));
}
}
Ensuite, vous avez terminé, cliquez simplement sur Exécuter.