[JAVA] Federeinspritzung verschieden

Vorbereitung

Erstellen Sie eine Klasse, die im Container registriert werden soll.

Triangle.java



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

Erstellen Sie eine XML-Datei für den Anwendungskontext (Spring-Container).

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>

Erstellen Sie eine Containereigenschaft in der Hauptklasse und verbinden Sie sie mit der XML-Datei. Zusätzlich erhalten Sie eine Triangle Class Bean aus dem Container.

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();
	}

Als Ergebnis wird hier das Dreieck gedruckt.

injection with setter

Wenn Sie beispielsweise eine Variable namens String type aus dem Container in die Triangle Class einfügen möchten Machen Sie zuerst einen 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!");            
    }                                                                             
                                                                                  
}                                                                                 
                                                                                  

Registrieren Sie den Wert, den Sie in den Container injizieren möchten

ApplicationContext.xml


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

Wenn Sie Main ausführen, wird "Triangle is here!" Ausgedruckt.

inject with constructor **Only 1 parameter

Erstellen Sie zunächst einen Konstruktor in der Triangle-Klasse. Es ist auch einfach, Parameter nur für den String-Typ zu akzeptieren.

Triangle.java


private String type;     

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

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

Im Container registrieren. Verwenden Sie beim Durchlaufen des Konstruktors den Konstruktor arg anstelle der Eigenschaft. Wenn es nur einen Parameter gibt, wird dieser erkannt, wenn Sie nur Wert schreiben.

ApplicationContext.xml


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

Wenn Sie Main ausführen, wird "Triangle is here!" Ausgedruckt.

**multiple parameter

Wenn der Konstruktor mehr als einen Parameter hat, wirft Spring die Werte nur der Reihe nach und erkennt sie nicht. Wenn Sie ihm also nichts zu sagen geben, haben Sie zwei Möglichkeiten. Einer ist Type = "xxx" (fügt Datentypinformationen hinzu) und der andere ist Name = "xxx" (fügt einen Variablennamen hinzu). Ich habe Name gewählt, weil ich den Fall schreiben möchte, in dem es zwei int-Variablen gibt. Erstens ist der Konstruktor.

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!");      
}                                                                       

                                                                                       

Registrierung zum Container.

ApplicationContext.xml


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


Als Ergebnis wird "Dreieck 20x100: Dreieck ist da" ausgedruckt.

object injection Injizieren Sie Beans (Eigenschaft) mit Setter in andere Klassen.

Erstellen Sie zunächst eine Klasse, die Sie injizieren möchten, und registrieren Sie sie im Container. Ich möchte den Wert im Container festlegen, also mache ich auch einen Setter. Ich habe auch einen Getter für den späteren Ausdruck in einer anderen Klasse gemacht.

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;
    }
}

Register + Wert im Container. Ich möchte 3 Wertesätze festlegen, also unterschiedliche IDs angeben und auf dieselbe Klasse verweisen.

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>

Erstellen Sie als Nächstes eine Variable in der Triangle-Klasse, die drei Bean-Obj akzeptiert. Wir erstellen auch einen Setter, um Bohnen aus dem Container zu akzeptieren. Der Code zum endgültigen Ausdrucken des Bean-Werts wurde mit draw () erstellt.

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());

    }

}                                               
                                                                                       

Im Container registrieren. name ist der Variablenname und ref ist die Bean-ID. Dann wurde Bean Obj in die Triangle Class-Variable injiziert.

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>

Nach dem Ausführen der Hauptklasse sieht es so aus. image.png

*Sonderedition Wenn diese Bean nur eine bestimmte Klasse verwendet, können Sie die Einstellung als innere Bean direkt in das Eigenschaftstag schreiben. Wenn beispielsweise point2 einer Bean nur Triangle verwendet, wird der Inhalt direkt in das Eigenschaftstag von PointB eingefügt. Sie müssen keine neue Bean-ID usw. hinzufügen. In diesem Fall ist es natürlich nicht möglich, diese Bean von einer anderen Klasse anzufordern.

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>

Das Obige ist ein Memorandum.

Recommended Posts

Federeinspritzung verschieden
[Java] [Spring] Spring Boot Das mysteriöse Hamarineta der Abhängigkeitsinjektion
Frühling × Docker
Spring Dependency Injection mit Java, Kotlin
Über den Frühling ③
FizzBuzz verschiedene
Frühling Java
Verschiedene Korrespondenztabellen zwischen Spring Framework und Spring Boot