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.
*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