Dans les fichiers de configuration de Spring, nous définissons souvent divers types de valeurs de propriété de Bean via des valeurs littérales, et cette fonction est implémentée via l'éditeur de propriétés.
Toute classe qui implémente l'interface java.beans.propertyeditor est un éditeur de propriété. Il peut convertir la valeur externe pour être définie en type correspondant à l'intérieur du JVM, donc l'éditeur de propriété est en fait un convertisseur de type.
1 rédacteur en chef Javabean
L'éditeur JavaBean développé par Sun est largement préparé pour l'IDE. Il permet à l'ID de définir visuellement les propriétés des Javabeans.
Java définit la méthode de définition des propriétés JavaBean via java.beans.propertyeditor. Grâce à Beaninfo, il décrit les propriétés de JavaBean personnalisables. De plus, il décrit également la correspondance entre les propriétés personnalisables et PropertyEditor.
La correspondance entre Beaninfo et Javabean est établie par la dénomination de la norme entre les deux. Le Beaninfo correspondant à Javabean adopte la spécification de dénomination suivante: <an Bean> Beaninfo. Par exemple, le Beaninfo correspondant à BookBean est BookBeanBeanInfo. Lorsqu'un Javabean est enregistré avec l'IDE avec son éditeur d'attributs, lorsque le Javabean est personnalisé dans l'interface de développement, l'IDE trouvera le Beaninfo correspondant en fonction de la spécification JavaBean, puis trouvera la description de l'attribut Javabean (qui a généré un éditeur d'attribut, etc.) en fonction des informations de description du beanino, et puis de générer un éditeur de développement spécifique, etc.) en fonction des informations de description du Beanino, et puis de générer une interface de développement spécifique pour l'interface Javabean.
Java fournit un gestionnaire pour gérer les éditeurs de propriétés par défaut: PropertyEditorManager, qui contient certains types de rédacteurs de propriétés courants. Si la propriété de type commun d'un JavaBean ne spécifie pas explicitement son éditeur de propriété via BeanInfo, l'IDE utilisera automatiquement l'éditeur par défaut pour les propriétés correspondantes enregistrées dans PropertyEditorManager.
1.1 PropertyEditor
PropertyEditor est l'interface de l'éditeur de propriétés qui définit une méthode d'interface qui convertit les valeurs de définition externe en valeurs de propriété JavaBean internes. Les principales méthodes d'interface sont expliquées comme suit:
| méthode | illustrer |
|---|---|
| Objet getValue () | Renvoie la valeur actuelle de l'attribut, le type de base est encapsulé dans le type de wrapper correspondant |
| void setValue (objet newValue) | Définissez la valeur de l'attribut, le type de base est passé comme le type de wrapper |
| String getastext () | Utilisez des chaînes pour représenter les objets d'attribut afin que les éditeurs d'attribut externes puissent les afficher visuellement. Renvoie NULL par défaut, indiquant que la propriété ne peut pas être représentée en tant que chaîne. |
| void setastext (texte de chaîne) | Utilisez une chaîne pour mettre à jour la valeur interne de la propriété, qui est généralement transmise de l'éditeur de propriété externe. |
| String [] getTags () | Renvoie un tableau de chaînes représentant des valeurs d'attribut valides afin que l'éditeur d'attribut puisse l'afficher de la manière suivante. Renvoie NULL par défaut. |
| String getJavainInialiacationsString () | Fournit une valeur initiale pour la propriété, que l'éditeur de propriété utilise comme valeur par défaut pour la propriété. |
L'interface PropertyEditor est un pont de communication entre les valeurs de propriété internes et les valeurs de réglage externe.
Java fournit une classe d'implémentation pratique pour PropertyEditor: PropertyEditorsupport, qui met en œuvre l'interface PropertyEditor. Nous pouvons concevoir notre propre éditeur de propriétés en étendant cette classe.
1.2 DESCRIPTION D'ATTRIBUTION DE BEAN (Beaninfo)
Beaninfo décrit les propriétés modifiables dans JavaBean et l'éditeur de propriété correspondant, chaque propriété correspond à un descripteur de propriété PropertyScriptor.
Le constructeur de PropertyDescriptor a deux paramètres: PropertyDescriptor (String PropertyName, Class BeanClass), où PropertyName est le nom de propriété; La classe de bean est la classe correspondant à JavaBean.
PropertyDescriptor possède également une méthode SetPropertyEditorClass (class PropertyEditorClass), qui spécifie un éditeur pour Javabean Properties.
La méthode la plus importante de l'interface BeanInfo est: PropertyDescriptor [] getPropertyDescriptors (), qui renverra le tableau des descripteurs de propriété JavaBean.
Une classe d'implémentation couramment utilisée pour l'interface BeanInfo est SimpleBeanInfo, que nous pouvons implémenter des fonctions personnalisées en étendant cette classe.
2 Éditeur de propriété par défaut de printemps
L'éditeur de propriétés de Spring est différent de l'éditeur de propriétés traditionnel pour le développement IDE. Il n'a pas d'interface d'interface utilisateur et convertit simplement la valeur de configuration du texte dans le fichier de configuration à la valeur correspondante de la propriété Bean.
Spring fournit un éditeur de propriétés par défaut pour les types de propriétés communs dans PropertyEditorRegistrySupport, qui est divisé en 3 catégories grandes, avec un total de 32:
| taper | illustrer |
|---|---|
| Types de données de base | [1] Types de données de base, tels que: booléen, int, etc.; [2] Classes d'encapsulation du type de données de base, telles que: booléen, entier, etc.; [3] Arrays de type de données de base: char [] et octet []; [4] Grand nombre: BigDecimal et BigInteger. |
| Classe de collecte | Collection, définition, tri, liste et tri. |
| Ressources | Class, Class [], File, InputStream, Locale, Properties, Resource [] et URL. |
Il existe deux variables de type de carte dans PropertyEditorRegistrySupport qui sauve des éditeurs de propriété:
| Nom variable | illustrer |
|---|---|
| Éditeurs par défaut | L'éditeur qui enregistre le type d'attribut par défaut, la clé de l'élément est le type d'attribut et la valeur est l'instance d'attribut correspondant. |
| personnalisé | Enregistrer les éditeurs d'attribut définis par l'utilisateur, les valeurs clés des éléments sont les mêmes que les endicteurs par défaut. |
3 éditeur de propriétés de printemps personnalisé
Si notre application définit un type spécial d'attribut et souhaite configurer la valeur d'attribut littéralement dans le fichier de configuration, nous pouvons écrire un éditeur d'attribut personnalisé et l'enregistrer auprès du conteneur Spring pour l'implémenter.
La plupart des éditeurs de propriété par défaut de Spring s'étendent de java.beans.propertyeditorsupport. Nous pouvons personnaliser l'éditeur de propriétés en étendant PropertyEditorsupport. Dans Spring Environment, il vous suffit de convertir la valeur littérale dans le fichier de configuration en un objet de type de propriété, et vous n'avez pas besoin de fournir une interface d'interface utilisateur, vous n'avez donc qu'à remplacer la méthode setastext () de PropertyEditorsupport (∩_∩) o haha ~.
Supposons que nous ayons deux entités et auteur entités, et nous espérons que lors de la configuration du livre, nous pouvons directement définir le nom de l'auteur.
Livre.java
Livre de classe publique {/ ** * Auteur * / auteur privé auteur; / ** * Titre du livre * / Nom de la chaîne privée; // omettez la méthode get / setter}Auteur.java
Auteur de classe publique {nom de chaîne privée; // omettez la méthode get / setter}Tout d'abord, personnalisez l'éditeur de propriété de l'auteur:
La classe publique CustomPropertyEditor étend PropertyEditorsupport {@Override public void setastext (String text) lève illégalArgumentException {if (text == null || text.length () == 0) {lancez new illégalArgumentException ("Format Error"); } Auteur auteur = nouvel auteur (); auteur.setName (texte); // appelle la méthode de la classe parent sur setValue (auteur); }} Si vous utilisez BeanFactory, vous devez appeler manuellement registerCustomEditor(Class requiredType, PropertyEditor propertyEditor) pour enregistrer l'éditeur de propriétés personnalisé; Si vous utilisez ApplicationContext, il vous suffit d'enregistrer le CustomEditorConfigurer dans le fichier de configuration. PustomEditorConfigurer implémente l'interface BeanFactoryPostProcessor, il s'agit donc d'un postprocesseur d'usine pour les haricots.
Enregistrez maintenant un éditeur de propriétés personnalisés:
<! - Enregistrez un éditeur de propriétés personnalisé -> <an Bean> <propriété name = "CustomEditors"> <map> <! - Key: Type de propriété; Valeur: éditeur de propriétés -> <entrée key = "net.deniro.spring4.editor.author" value = "net.deniro.spring4.editor.CustomPropertyEditor" /> </ map> </ propriété> </ bean> <bean id = "book"> <propriété name = "name" value = "kafka by the Sea" /> <! - Inject Value = "Haruki Murakami" /> </EAN>
Lors de la définition de la propriété de l'auteur du livre, le registre des éditeurs de propriétés personnalisés sera récupéré. Lorsque l'éditeur de propriété CustomPropertyEditor correspondant au type de propriété de l'auteur est trouvé, il convertira "Haruki Murakami" en un objet d'auteur.
Selon les spécifications, Java cherchera à savoir si <JavaBean>Editor existe sous le même package de classe de JavaBean; S'il existe, il utilisera automatiquement <JavaBean>Editor comme éditeur de propriété du JavaBean. Spring prend également en charge cette spécification.
Donc, s'il y a une classe d'éditeur de propriétés nommée Authoreditor dans le package de classe, il n'est pas nécessaire d'enregistrer un éditeur de propriétés personnalisé dans le fichier de configuration O (∩_∩) o haha ~
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.