[JAVA] Injection de ressort divers

Préparation

Créez une classe à enregistrer dans le conteneur.

Triangle.java



package com.springLearning;                                                             
                                                                                        
public class Triangle {                                                                 
                                                                          
    public void draw(){                                                                 
        System.out.println("Triangle is here!");                  
    }                                                                                   
                                                                                        
}                                                                                       

Créez un fichier Xml pour le contexte d'application (conteneur Spring).

ApplicationContext.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"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">

    <bean id="Triangle" class="com.springLearning.Triangle">
        
    </bean>

</beans>

Créez une propriété de conteneur dans la classe principale et connectez-la au fichier Xml. De plus, vous recevrez un bean Triangle Class du conteneur.

DrawingApplication.java


public static void main(String[] args) {
		//instantiate Spring container and load the xml config
		//Spring container path for Marven:src\main\resources
		ClassPathXmlApplicationContext mContext=
                   new ClassPathXmlApplicationContext("ApplicationContext.xml");

		//get object from Spring container(Application Context)
		//also Triangle mTriangle=(Triangle)mContext.getBean("Triangle");
		Triangle mTriangle=mContext.getBean("Triangle",Triangle.class);
		mTriangle.draw();
	}

En conséquence, Triangle est ici est imprimé.

injection with setter

Par exemple, si vous souhaitez injecter une variable appelée type String du conteneur dans la classe Triangle Tout d'abord, faites un setter.

Triangle.java


public class Triangle {                                                           
    private String type;                                                          
                                                     
    public void setType(String type) {                                          
        this.type = type;                                                         
    }                                                                           
                                       
    public void draw(){                                                           
        System.out.println(type+":Triangle is here!");            
    }                                                                             
                                                                                  
}                                                                                 
                                                                                  

Enregistrez la valeur que vous souhaitez injecter dans le conteneur

ApplicationContext.xml


 <bean id="Triangle" class="com.springLearning.Triangle">
        <property name="type" value="Triangle"/>
 </bean>

Si vous exécutez Main, "Triangle is here!" Sera imprimé.

inject with constructor **Only 1 parameter

Tout d'abord, créez un constructeur dans la classe Triangle. Il est également facile d'accepter des paramètres pour le type String uniquement.

Triangle.java


private String type;     

public Triangle(String type) {            
    this.type = type;                     
}

public void draw(){                                                           
        System.out.println(type+":Triangle is here!");            
    }                                                        

Inscrivez-vous dans le conteneur. Lorsque vous passez par le constructeur, utilisez le constructeur arg au lieu de property. S'il n'y a qu'un seul paramètre, il sera reconnu si vous n'écrivez que Value.

ApplicationContext.xml


 <bean id="Triangle" class="com.springLearning.Triangle">
        <constructor-arg value="Triangle"/>
 </bean>

Si vous exécutez Main, "Triangle is here!" Sera imprimé.

**multiple parameter

Si le constructeur a plus d'un paramètre, Spring jette simplement les valeurs dans l'ordre et il ne le reconnaît pas, donc si vous ne lui donnez pas quelque chose à dire, vous avez deux options. L'un est Type = "xxx" (ajoute des informations sur le type de données) et l'autre est Name = "xxx" (ajoute un nom de variable). J'ai choisi Name parce que je veux écrire le cas où il y a deux variables int. Le premier est le constructeur.

Triangle.java


private String type;    
private int height;     
private int base;       

 public Triangle(String type, int height, int base) {    
     this.type = type;                                   
     this.height = height;                               
     this.base=base;                                     
 } 

public void draw(){                                                     
    System.out.println(type+height+"x"+base+":Triangle is here!");      
}                                                                       

                                                                                       

Inscription au conteneur.

ApplicationContext.xml


<bean id="Triangle" class="com.springLearning.Triangle">
       <constructor-arg name="type" value="Triangle"/>
        <constructor-arg name="height" value="20"/>
        <constructor-arg name="base" value="100"/>
    </bean>


En conséquence, "Triangle 20x100: Le triangle est ici" est imprimé.

object injection Injectez des beans (propriété) dans d'autres classes avec setter.

Tout d'abord, créez une classe que vous prévoyez d'injecter et enregistrez-la dans le conteneur. Je veux définir la valeur dans le conteneur, donc je crée également un setter. J'ai également créé un getter pour une impression ultérieure dans une autre classe.

Point.java


package com.springLearning;

public class Point {
    private int x;
    private int y;
    private int z;

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int getZ() {
        return z;
    }

    public void setZ(int z) {
        this.z = z;
    }
}

Inscription + valeur dans le conteneur. Je veux définir 3 ensembles de valeurs, alors donnez des identifiants différents et faites référence à la même classe.

ApplicationContext.xml


 <bean id="Point0" class="com.springLearning.Point">
        <property name="x" value="0"/>
        <property name="y" value="0"/>
        <property name="z" value="0"/>
 </bean>

 <bean id="Point2" class="com.springLearning.Point">
        <property name="x" value="0"/>
        <property name="y" value="14"/>
        <property name="z" value="18"/>
</bean>

<bean id="Point3" class="com.springLearning.Point">
        <property name="x" value="0"/>
        <property name="y" value="24"/>
        <property name="z" value="28"/>
</bean>

Ensuite, créez une variable dans la classe Triangle qui accepte trois bean Obj. Nous créons également un setter pour accepter les beans du conteneur. Le code pour finalement imprimer la valeur du bean a été créé avec draw ().

Triangle.java


public class Triangle {
    private Point pointA;
    private Point pointB;
    private Point pointC;

    public void setPointA(Point pointA) {
        this.pointA = pointA;
    }

    public void setPointB(Point pointB) {
        this.pointB = pointB;
    }

    public void setPointC(Point pointC) {
        this.pointC = pointC;
    }

    public void draw(){
        System.out.printf("PointA:%d,%d,%d%n",pointA.getX(),pointA.getY(),pointA.getZ());
        System.out.printf("PointB:%d,%d,%d%n",pointB.getX(),pointB.getY(),pointB.getZ());
        System.out.printf("PointA:%d,%d,%d%n",pointC.getX(),pointC.getY(),pointC.getZ());

    }

}                                               
                                                                                       

Inscrivez-vous dans le conteneur. name est le nom de la variable et ref est l'ID du bean. Ensuite, bean obj a été injecté dans la variable Triangle Class.

ApplicationContext.xml


<bean id="Triangle" class="com.springLearning.Triangle">
        <property name="PointA" ref="Point1"/>
        <property name="PointB" ref="Point2"/>
        <property name="PointC" ref="Point3"/>
    </bean>

Après avoir exécuté la classe principale, cela ressemble à ceci. image.png

ApplicationContext.xml


<bean id="Triangle" class="com.springLearning.Triangle">
        <property name="PointA" ref="Point0"/>
        <property name="PointB" >
            <bean  class="com.springLearning.Point">
                <property name="x" value="0"/>
                <property name="y" value="14"/>
                <property name="z" value="18"/>
            </bean>
        </property>
        <property name="PointC" ref="Point3"/>
</bean>

Ce qui précède est un mémorandum.

Recommended Posts

Injection de ressort divers
[Java] [Spring] Spring Boot Mystérieux hamarinet d'injection de dépendances
printemps × docker
Injection de dépendances Spring à l'aide de Java, Kotlin
À propos du printemps ③
FizzBuzz divers
Spring Java
Divers tableau de correspondance de Spring Framework et Spring Boot