Notes d'étude de printemps: injection de dépendances basée sur XML

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

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.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_46149121/article/details/109344201
conseillé
Classement