Lorsque nous stockions des objets bean auparavant, nous devions ajouter une ligne de beans dans le fichier de configuration pour les injecter
Cette méthode d'injection n'est pas bonne S'il y a une erreur dans. le fichier de configuration, le programme est Aucun message d'erreur ne sera affiché. C'est très hostile aux débutants.
Créer une classe de démarrage et une méthode principale
创建启动类和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对象查找的根目录,意味着会从这个目录开始向下搜索,但不会向上:
下级目录
上级目录
Présentation des dépendances
rrreee
Créer un fichier de configuration
Nous avons convenu de créer l'objet bean dans com.bean sous le package :
rrreee
2. Ajoutez des annotations pour stocker les beans dans le conteneurLe cœur de l'utilisation de Spring est d'utiliser des annotations. Nous avons appris 5 annotations@Controller [Controller] @Service [Service] @Repository [Warehouse] @Configuration [Configuration. /Layout]@Component [Component] Contrôleur 2.1
Nous avons pu obtenir l'objet en passant le paramètre id auparavant, mais cela revenait à ajouter une ligne de beans pour ajouter manuellement l'identifiant, mais maintenant que nous utilisons des annotations, pouvons-nous utiliser uniquement le type de classe pour l'obtenir ? Lorsque nous utilisons des annotations pour injecter des objets bean, l'identifiant est en fait la forme chameau du nom de classe par défaut : La raison ne sera pas expliquée en premier, mais sera discutée plus tard.Erreurs faciles
:
Nous avons précédemment ajouté le répertoire racine pour la recherche d'objets bean dans le fichier de configuration, ce qui signifie que la recherche commencera à partir de ce répertoire vers le bas, mais pas vers le haut :
Répertoire de téléchargement
Annuaire Parent
2.2 Service
2.3 Référentiel
🎜🎜🎜🎜🎜🎜 🎜2.4 Configuration🎜 🎜🎜🎜🎜🎜🎜🎜Composant 2.5🎜🎜🎜 🎜🎜🎜🎜🎜2.6 Pourquoi existe-t-il cinq grandes catégories d'annotations🎜🎜🎜🎜🎜Chacun dans l'entreprise est responsable de différents domaines, donc les annotations de classe utilisées sont également différentes, mais l'essence des cinq grandes catégories d'annotations est la même . 🎜🎜🎜🎜🎜🎜🎜🎜Nous pouvons clairement voir à travers les deux annotations de classe que les quatre autres annotations introduisent toutes des méthodes de l'annotation Component, ce qui signifie que Component est le père des quatre autres annotations de classe. Alors, que fait Component ? Ce n'est tout simplement pas facile de le classer dans les quatre autres catégories lors de l'annotation~🎜🎜2.7 Pourquoi l'identifiant par défaut est-il une petite bosse🎜🎜Nous utilisons la recherche globale :🎜🎜Trouver AnnotationBeanNameGenerator :
Test :
L'annotation Bean est une annotation de méthode Lorsqu'elle est utilisée sur une méthode, elle renvoie. L'objet sera également injecté par Spring, mais il doit être utilisé avec cinq principaux types d'annotations (n'importe laquelle fera l'affaire)
id est le nom de la méthode.
Remarque
: Lorsque vous utilisez l'attribut name pour renommer, l'original Le nom de la méthode perdra son effet, ce qui signifie que seul le nom modifié pourra être utilisé comme identifiant. 注意
:当使用name属性重命名后,原本的方法名将失去作用,也就是说只能使用那么修改后的名字作为id了。
获取bean对象也叫对象注入,其有以下3种方法:
属性注入
构造方法注入
Setter注入
虽然现在看起来没什么问题,但是当我们对同一类型的对象进行了多次注入:
此时就需要精准定位所选择的对象了,需要类型+名字
:
Resource有个name 属性,可以指定注入bean的名称
但Autowired也有个搭配注解,@Qualifier,一样可以指定选择的bean对象,所以二者之间嘛,我觉得打成平手
ps
:Autowired注解一开始是要进行查询所有类型为所需注入的对象的类型,但Autowired一次只能注入一个对象,因此当统一类型的对象注入多次后会报错。而Qualifier注解本质上是对其所查询的结果进行筛选。
还是使用Autowired注解:
ps
Obtenir des objets bean est également appelé injection d'objets. Il existe trois méthodes :
type+name
:🎜🎜🎜🎜1.2Resource🎜🎜🎜🎜1.3 La différence entre les deux🎜🎜La ressource a un attribut name, qui peut spécifier le nom du bean injecté🎜🎜🎜🎜Mais Autowired a également une annotation correspondante, @Qualifier, qui peut également spécifier l'objet bean sélectionné, donc Entre les deux, je pense que c'est une égalité🎜🎜🎜🎜ps
: L'annotation Autowired interroge initialement tous les types pour les types d'objets qui doivent être injectés, mais Autowired ne peut injecter qu'un seul objet à la fois, donc lorsqu'un type unifié Une erreur sera signalé après que l'objet ait été injecté plusieurs fois. L'annotation Qualifier filtre essentiellement les résultats de sa requête. 🎜ps
: lorsqu'il n'y a qu'un seul constructeur, Autowired peut être omis🎜🎜mais il ne peut pas être omis lorsqu'il y en a plus de deux🎜🎜🎜🎜
ou via Autowired
Resource
L'injection Setter est également prise en charge.
Quelle est la différence entre l'injection d'attributs, l'injection de constructeur et l'injection de setter ?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!