Spring構成ファイルでは、多くの場合、リテラル値を使用してさまざまなタイプのBean値をBeanのプロパティ値を設定し、この関数はプロパティエディターを介して実装されます。
java.beans.propertyeditorインターフェイスを実装するクラスは、プロパティエディターです。 JVM内の対応するタイプに設定する外部値を変換することができるため、プロパティエディターは実際にはタイプコンバーターです。
1 Javabean編集者
Sunによって開発されたJavabeanの編集者は、IDEのために主に準備されています。 IDEがJavabeansの特性を視覚的に設定できるようになります。
Javaは、java.beans.propertyeditorを介してJavabeanプロパティを設定する方法を定義しています。 Beaninfoを通じて、Javabeanのどの特性がカスタマイズ可能であるかを説明します。さらに、カスタマイズ可能なプロパティとPropertyEditorの対応も説明しています。
BeaninfoとJavabeanの対応は、2つの間の標準の命名を通じて確立されています。 Javabeanに対応するBeaninfoは、次の命名仕様を採用しています:<bean> beaninfo。たとえば、BookBeanに対応するBeaninfoはBookBeanBeanInfoです。 JavabeanがIDEに属性エディターと一緒に登録されると、Javabeanが開発インターフェイスでカスタマイズされると、IDEはJavabeanの仕様に従って対応するBeaninfoを見つけ、Javabean属性の説明(属性エディターが使用されます)を見つけます。
Javaは、デフォルトのプロパティエディターを管理するマネージャーを提供します:PropertyEditormanagerは、いくつかの一般的なタイプのプロパティエディターを保持しています。 Javabeanの共通タイププロパティがBeaninfoを介してプロパティエディターを明示的に指定しない場合、IDEはPropertyEditormanagerに登録されている対応するプロパティに対してデフォルトエディターを自動的に使用します。
1.1プロパティエディター
PropertyEditorは、外部SET値を内部Javabeanプロパティ値に変換するインターフェイスメソッドを定義するプロパティエディターインターフェイスです。主なインターフェイス方法は、次のように説明されています。
| 方法 | 説明します |
|---|---|
| ObjectGetValue() | 属性の現在の値を返し、基本タイプは対応するラッパータイプにカプセル化されます |
| void setValue(object newValue) | 属性の値を設定すると、基本タイプはラッパータイプとして渡されます |
| string getastext() | 文字列を使用して属性オブジェクトを表して、外部属性エディターが視覚的に表示できるようにします。デフォルトでnullを返し、プロパティを文字列として表現できないことを示します。 |
| void setastext(文字列テキスト) | 文字列を使用して、一般に外部プロパティエディターから渡されるプロパティの内部値を更新します。 |
| string [] gettags() | 属性エディターが次の方法で表示できるように、有効な属性値を表す文字列の配列を返します。デフォルトでnullを返します。 |
| 文字列getJavainitializationString() | プロパティエディターがプロパティのデフォルト値として使用するプロパティの初期値を提供します。 |
PropertyEditorインターフェイスは、内部プロパティ値と外部設定値の間の通信ブリッジです。
Javaは、PropertyEditorのインターフェイスを実装するPropertyEditor:PropertyEditorsupportに便利な実装クラスを提供します。このクラスを拡張することで、独自のプロパティエディターを設計できます。
1.2 Bean属性説明(Beaninfo)
BeanInfoは、Javabeanと対応するプロパティエディターの編集可能なプロパティについて説明します。各プロパティは、プロパティ記述子プロパティデスプトルに対応しています。
PropertyDescriptorのコンストラクターには2つのパラメーターがあります。PropertyDescriptor(String PropertyName、Class BeanClass)、PropertyNameはProperty名です。 BeanClassはJavabeanに対応するクラスです。
PropertyDescriptorには、Javabean Propertiesのエディターを指定するSetPropertyEditorClass(class PropertyEditorClass)メソッドもあります。
Beaninfoインターフェイスで最も重要な方法は次のとおりです。PropertyDescriptor[] GetPropertyDescriptors()は、Javabean Property Decruptor Arrayを返します。
Beaninfoインターフェイスの一般的に使用される実装クラスはSimpleBeanInfoで、このクラスを拡張することでカスタマイズされた関数を実装できます。
2スプリングデフォルトのプロパティエディター
Springのプロパティエディターは、IDE開発の従来のプロパティエディターとは異なります。 UIインターフェイスはなく、構成ファイルのテキスト構成値をBeanプロパティの対応する値に変換するだけです。
Springは、PropertyEditorRegistrySupportの共通プロパティタイプのデフォルトのプロパティエディターを提供します。
| タイプ | 説明します |
|---|---|
| 基本的なデータ型 | [1] Boolean、Intなどの基本的なデータ型。 [2] Boolean、Integerなどの基本的なデータ型カプセル化クラス。 [3]基本的なデータ型配列:char []およびbyte []; [4]多数:BigDecimalとBiginteger。 |
| コレクションクラス | コレクション、セット、ソートセット、リスト、およびソートマップ。 |
| リソース | class、class []、file、inputstream、locale、プロパティ、リソース[]、およびurl。 |
プロパティエディターを保存するPropertyEditorRegistrySupportには、2つのマップタイプ変数があります。
| 変数名 | 説明します |
|---|---|
| DefaultEditors | デフォルトの属性タイプを保存するエディター、要素のキーは属性タイプであり、値は対応する属性エディターインスタンスです。 |
| CustomEditors | ユーザー定義の属性エディターを保存すると、要素の重要な値はdefaultEditorsと同じです。 |
3カスタムスプリングプロパティエディター
アプリケーションが特別なタイプの属性を定義し、構成ファイルで文字通り属性値を構成したい場合は、カスタム属性エディターを書き込み、スプリングコンテナに登録して実装できます。
Springデフォルトのプロパティエディターのほとんどは、java.beans.propertyeditorsupportから拡張されています。 PropertyEditorSupportを拡張して、プロパティエディターをカスタマイズできます。 Spring環境では、構成ファイルのリテラル値をプロパティタイプのオブジェクトに変換するだけで、UIインターフェイスを提供する必要がないため、PropertyEditorSupport(∩_∩)o Haha〜のSetastext()メソッドをオーバーライドするだけです。
2つのエンティティブックと著者があるとし、本を構成するときに著者名を直接設定できることを願っています。
book.java
パブリッククラスブック{ / ***著者* /プライベート著者著者; / ***本のタイトル*/プライベート文字列名; // get/setterメソッドを省略}著者
パブリッククラス著者{プライベート文字列名; // get/setterメソッドを省略}まず、著者のプロパティエディターをカスタマイズします。
パブリッククラスCustomPropertyEditorは、PropertyEditorSupportを拡張します{@Override public void setastext(string text)shleg legalargumentexception {if(text == null || text.length()== 0){throw new IllegalargumentException( "Format error"); }著者著者= new Author(); author.setname(text); //親クラスのメソッドを呼び出してsetValue(著者); }} BeanFactoryを使用する場合は、Custom Property Editorを登録するには、 registerCustomEditor(Class requiredType, PropertyEditor propertyEditor)メソッドを手動で呼び出す必要があります。 ApplicationContextを使用している場合は、CustomEditorConfigurerを構成ファイルに登録するだけです。 CustomEditorConfigurerは、BeanFactoryPostProcessorインターフェイスを実装しているため、豆の工場のポストプロセッサです。
次に、カスタムプロパティエディターを登録します。
<! - カスタムプロパティエディターを登録 - > <bean> <プロパティname = "Customeditors"> <map> <! - key:Property Type;値:プロパティエディター - > <エントリキー= "net.deniro.spring4.editor.author" value = "net.deniro.spring4.editor.custompropertyeditor"/> </map> </bean> <bean id = "book"> <propertion name "value =" kafka <プロパティ名= "著者" value = "村上Haruki"/> </bean>
本の著者プロパティを設定すると、カスタムプロパティエディターレジストリが取得されます。著者のプロパティタイプに対応するプロパティエディターCustomPropertyeditorが見つかった場合、「村上Haruki」を著者オブジェクトに変換します。
仕様によれば、Javaは<JavaBean>EditorのクラスがJavabeanの同じクラスパッケージの下に存在するかどうかを探します。存在する場合、javabeanのプロパティエディターとして<JavaBean>Editor自動的に使用します。 Springはこの仕様もサポートしています。
したがって、クラスパッケージの下にAuthoreditorという名前のプロパティエディタークラスがある場合、Configurationファイルo(∩_∩)o haha〜にカスタムプロパティエディターを登録する必要はありません〜
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。