Als wir zuvor Bean-Objekte gespeichert haben, mussten wir eine Zeile mit Beans in die Konfigurationsdatei einfügen, um sie zu injizieren.
Diese Injektionsmethode ist nicht gut, wenn ein Fehler auftritt In der Konfigurationsdatei befindet sich das Programm. Es wird keine Fehlermeldung angezeigt. Das ist für Anfänger sehr unfreundlich.
Erstellen Sie eine Startklasse und eine Hauptmethode
创建启动类和main方法
引入依赖
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.2.3.RELEASE</version> </dependency> </dependencies>
创建配置文件
我们约定好创建的bean对象放在com.bean包下:
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.2.3.RELEASE</version> </dependency> </dependencies>
使用Spring的核心就是使用注解,我们学习的注解有5个
@Controller 【控制器】@Service 【服务】@Repository 【仓库】@Configuration 【配置/布局】@Component 【组件】 2.1 controller
我们之前能够通过传入id参数来获取对象,但那是加了一行bean手动加入的id,但现在我们使用了注解,难道就只能使用类类型来获取吗?
我们使用注解注入bean对象时,id其实默认是类名的小驼峰形式:
原因先不解释,后面会说。
容易犯的错
:
我们之前在配置文件中加入了bean对象查找的根目录,意味着会从这个目录开始向下搜索,但不会向上:
下级目录
上级目录
Einführung von Abhängigkeiten
rrreee
Konfigurationsdatei erstellen
Wir haben vereinbart, das Bean-Objekt in com.bean zu erstellen Paket:
rrreee
2. Fügen Sie Anmerkungen hinzu, um Beans im Container zu speichernDer Kern der Verwendung von Spring besteht in der Verwendung von Anmerkungen. Wir haben 5 Anmerkungen gelernt@Controller [Controller] @Service [Service] @Repository [Warehouse] @Configuration [Konfiguration /Layout]@Component [Component] 2.1 Controller
Wir konnten das Objekt zuvor durch die Übergabe des Parameters „id“ erhalten, aber das bedeutete, dass wir eine Reihe von Beans hinzufügen mussten, um die ID manuell hinzuzufügen. Aber jetzt, wo wir Annotationen verwenden, können wir dann nur den Klassentyp verwenden, um es zu erhalten? Wenn wir Annotationen zum Einfügen von Bean-Objekten verwenden, ist die ID standardmäßig die Kamelfallform des Klassennamens: Der Grund wird zunächst nicht erklärt, sondern später besprochen.Einfache Fehler
:
Wir haben zuvor das Stammverzeichnis für die Bean-Objektsuche in der Konfigurationsdatei hinzugefügt, was bedeutet, dass die Suche von diesem Verzeichnis nach unten, aber nicht nach oben beginnt:
Verzeichnis herunterladen
Übergeordnetes Verzeichnis
2.2 Dienst
2.3 Repository
🎜🎜🎜🎜🎜🎜 🎜2.4 Konfiguration🎜 🎜🎜🎜🎜🎜🎜🎜2,5 Komponente🎜🎜🎜 🎜🎜🎜🎜🎜2.6 Warum gibt es fünf Hauptkategorien von Anmerkungen? Dasselbe . 🎜🎜🎜🎜🎜🎜🎜🎜Anhand der beiden Klassenanmerkungen können wir deutlich erkennen, dass die anderen vier Annotationen alle Methoden der Component-Annotation einführen, was bedeutet, dass Component der Vater der anderen vier Klassenannotationen ist. Was macht Component also? Es ist einfach nicht einfach, es beim Kommentieren in die anderen vier Kategorien einzuordnen~🎜🎜2.7 Warum ist die Standard-ID ein kleiner Buckel? Wir verwenden die globale Suche:🎜🎜AnnotationBeanNameGenerator finden:
Test:
Bean-Annotation ist eine Methodenannotation. Wenn sie für eine Methode verwendet wird, wird sie zurückgegeben Das Objekt wird ebenfalls von Spring injiziert, muss jedoch mit fünf Haupttypen von Anmerkungen verwendet werden (jeder reicht aus).
id ist der Methodenname. 2.8.1 Bean-Umbenennung verliert seine Wirkung, was bedeutet, dass nur der geänderte Name als ID verwendet werden kann.
1.1 Autowired
注意
:当使用name属性重命名后,原本的方法名将失去作用,也就是说只能使用那么修改后的名字作为id了。
获取bean对象也叫对象注入,其有以下3种方法:
属性注入
构造方法注入
Setter注入
虽然现在看起来没什么问题,但是当我们对同一类型的对象进行了多次注入:
此时就需要精准定位所选择的对象了,需要类型+名字
:
Resource有个name 属性,可以指定注入bean的名称
但Autowired也有个搭配注解,@Qualifier,一样可以指定选择的bean对象,所以二者之间嘛,我觉得打成平手
ps
:Autowired注解一开始是要进行查询所有类型为所需注入的对象的类型,但Autowired一次只能注入一个对象,因此当统一类型的对象注入多次后会报错。而Qualifier注解本质上是对其所查询的结果进行筛选。
还是使用Autowired注解:
ps
Obwohl es jetzt kein Problem zu geben scheint, wenn wir mehrere Operationen an denselben Objekttypen ausführen, Injektionen:
🎜🎜🎜Sie benötigen es zu diesem Zeitpunkt, um das genau zu lokalisieren Ausgewähltes Objekt, Sie benötigenTyp+Name
:🎜🎜🎜🎜1.2Resource🎜🎜🎜🎜1.3 Der Unterschied zwischen den beiden🎜🎜Ressource hat ein Namensattribut, das den Namen der injizierten Bean angeben kann🎜🎜🎜🎜Aber Autowired hat auch eine passende Annotation, @Qualifier, die auch das ausgewählte Bean-Objekt angeben kann, also Ich denke, es ist ein Gleichstand zwischen den beiden " />🎜🎜ps
: Die Autowired-Annotation fragt zunächst alle Typen nach den Objekttypen ab, die injiziert werden müssen, Autowired kann jedoch jeweils nur ein Objekt injizieren, sodass bei einem einheitlichen Typ ein Fehler auftritt wird gemeldet, nachdem das Objekt mehrmals injiziert wurde. Die Qualifier-Annotation filtert im Wesentlichen die Ergebnisse ihrer Abfrage. 🎜oder über Autowired
Resource
Setter-Injection wird ebenfalls unterstützt.
Was ist der Unterschied zwischen Attributinjektion, Konstruktorinjektion und Setterinjektion?
Das obige ist der detaillierte Inhalt vonBeispielanalyse von Lese- und Schreibvorgängen in Java Spring. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!