豆とスプリングの容器の関係
Bean構成情報は、豆の実装と依存関係を定義します。スプリングコンテナは、さまざまな形式のBean構成情報に基づいてコンテナ内のBean定義レジストリを確立し、レジストリに従って豆を積み込み、インスタンス化し、豆と豆の間の依存関係を確立します。最後に、これらの準備ができた豆は、外部アプリケーションを呼び出すためにBeanキャッシュプールに配置されます。
この記事では、春に豆を動的に構成するためのエンコーディング方法の使用に関する詳細を紹介します。私たちはあなたの参照と学習のためにそれらを共有します。以下ではあまり言いません。詳細な紹介を一緒に見てみましょう。
1 DefaultListableBeanFactory
DefaultListableBeanFactoryは、ConfigureAblElistableBeanFactoryインターフェイスを実装します。注入された豆もAOPによって強化できるようにするために、Beanの工場PostprocessorインターフェイスBeanFactoryPostprocessorを実装する必要があります。
動的注射を必要とする豆:
パブリッククラスBookservice {bookdao bookdao; public void setbookdao(bookdao bookdao){this.bookdao = bookdao; } public bookdao getbookdao(){return bookdao; }}豆の工場ポストプロセッサインターフェイスの実装:
@ComponentPublic Class BookserviceFactoryBean BeanFactoryPostProcessor {public void postprocessbeanfactory(configureablelistablebeanfactory beanfactory)Beansexcection {defaultListableBeanFactory =(DefaultListableBeanFactory)BeanFactory; // Bean Definition BeanDefinitionBuilder Builder = BeanDefinitionBuilder.GenericBeanDefinition(bookervice.class); //プロパティBuilder.AddPropertyReference( "bookdao"、 "bookdao")を設定します。 // Bean Difiction Factory.RegisterBeanDefinition( "Bookservice1"、Builder.getRawBeanDefinition())を登録します。 // bean instance factory.registersingleton( "bookservice2"、new net.deniro.spring4.dynamic.bookservice()); }}ここでは、bookdaoが容器に注入されたと想定されています(XMLまたは注釈法)。
ここでは、豆の定義を登録するか、豆のインスタンスを直接登録できます。
構成:
<コンテキスト:component-scanベースパッケージ= "net.deniro.spring4.dynamic" />
ユニットテスト:
bookservice bookservice1 =(bookservice)context.getbean( "bookservice1"); assertnotnull(bookservice1); assertnotnull(bookservice1.getbookdao()); bookservice)context.getbean( "bookervice2"); assertnotnull(bookervice2);
2つのカスタムタグ
コンポーネントをより適切にカプセル化し、使いやすさを強化するために、コンポーネントをラベルとして定義します。
タグをカスタマイズする手順は次のとおりです。
リソースのスキーマフォルダーの下にbookservice.xsdを作成します
<?xml version = "1.0" encoding = "utf-8"?> <xsd:schema xmlns = "http://www.net/schema/service" xmlns:xsd = "http://www.w3.org/2001/xmlschema" xmlns:beans = "http://www.springframework.org/schema/beans" targetnamespace = "http://www.deniro.net/schema/service" elementformdefault = "qualified"属性フォームデフォルト= " namespace = "http://www.springframework.org/schema/beans"/> <! - define book-serviceタグ - > <xsd:要素name = "book-service"> <xsd:complextype> <xsd:complexContent> <XSD:拡張型= "Beans:"> <> < <xsd:属性名= "dao" type = "xsd:string" use = "required"/> </xsd:extension> </xsd:complexContent> </xsd:complextype> </xsd:element> </xsd:schema>
次に、サービスタグパーサーを定義します。
Public Class BooksErviteFinitionParserは、BeanDefinitionParser {public BeanDefinition Parse(要素要素、ParserContext ParserContext){// Bean DefinitionBeanDefinitionBuilder Builder = BeanDefinitionBuilder.GenericBeanDefinition(Bookservice.Class); //カスタムタグ属性文字列dao = element.getattribute( "dao"); builder.addpropertyreference( "bookdao"、dao); // register bean define parsercontext.registerbeanComponent(new BeanComponentDefinition(Builder .GetRawBeanDefinition()、 "Bookservice")); nullを返します。 }}次に、名前空間で定義したパーサーを登録します。
public class bookservicenamespacehandlerは、namespacehandlersupportを拡張します{public void init(){RegisterBeanDefinitionParser( "book-service"、new bookservicedefinitionParser()); }}次に、リソースでメタINFフォルダーを作成し、spring.schemasとspring.handlersを作成します。これらは、カスタムタグのドキュメント構造ファイルパスとカスタムネームスペースを解析するパーサーを構成するために使用されます。
ファイルパス
spring.handlers:
http/://www.deniro.net/schema/service = net.deniro.spring4.dynamic.bookservicenamespacehandler
spring.schemas:
http/://www.deniro.net/schema/service.xsd=schema/bookservice.xsd
注: XSDファイルは、リソースの子孫ディレクトリに配置する必要があります。
カスタムタグの引用:
<?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:me = "http://www.deniro.net/schema/service" xsi:schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/bean/springspringspring/ http://www.deniro.net/schema/service http://www.deniro.net/schema/service.xsd "> <bean id =" bookdao "/> <me:book-service dao =" bookdao "/> </beans>
ここでは、頭のカスタムタグを参照して「私」と名付けました。その後、それを使用できます。
要約します
上記は、この記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。