Springが簡単な例でJavaオブジェクトを管理する方法を解体します。
まず、単純なpojoを定義します。コードは次のとおりです。
パッケージcom.jvk.ken.spring; public class demo {private string name; public demo(){name = "ime demo。";} public void printname(){system.out.println(name);} public void setName(string name){this.name = name;}}}}対応するスプリング構成ファイルは次のとおりです。
<?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:Context = "http://www.springframework.org/schema/context" xsi:schemalocation = "http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd "> <bean id =" demo "/> </beans>
簡単なテストコードは次のとおりです。
パッケージcom.jvk.ken.spring; Import org.springframework.beans.factory.beanfactory; import org.springframework.beans.factory.xml.xmlbeanfactory; Import org.springframework.core.io.classathresource; public void main [] string boid argus( {testspring();} private static void testspring()throws Exception {beanFactory bf = new classPathResource( "ApplicationContext.xml"); demo bean =(demo)bf.getbean( "demo");テストクラスを実行して、次の情報を出力し、単純なスプリングの例が正常に実行されたことを示します。
2012-3-28 22:18:07 org.springframework.beans.factory.xml.xmlbeandefinitionReader loadbeandefinitions情報:クラスパスリソースからのXML Bean定義のロード[ApplicationContext.xml]クラスcom.jvk.ken.spring.demo I'm demo。
短いJavaコードとXML構成ファイルから、XMLBeanFactoryがXML構成ファイルを読んでJavabeanを組み立て、ユーザーがGetBeanメソッドを呼び出すときに必要なオブジェクトを返すことがわかります。その動作を模倣するために、私は単純なBeanFactoryを定義します。
パッケージcom.jvk.ken.spring; Import java.util.hashmap; import java.util.map; public class mybeanfactory {// bean map <string、class> beans = new hashmap <string>(); public object getbean(string id)throwsexcectionexcectionexcection、lighalaccessexexexexexexexexcectionex beans.get(id).newinstance();} private string xmlfile; public mybeanfactory(string xmlfile)throws classNotFoundException {super(); this.xmlfile = xmlfile; init();} private void init()throws classNotFoundException {// initialize and parse xml、ここではsystem.out.println( "構成ファイル:"+xmlfile); string configuration file: "+xmlfile); "com.jvk.ken.spring.demo"; class <?> loadclass = this.getClass()。getClassLoader()。loadClass(className); beans.put( "demo"、loadclass);}}}}テストコードは次のとおりです。
パッケージcom.jvk.ken.spring; public class test {public static void main(string [] args)throws exception {testnotspring();} private static void testnotspring()throws exception {mybeanfactory bf = new mybeanfactory( "applicationcontext.xml"); demo bean =(demo) bf.getbean( "demo"); system.out.println(bean.getclass()); bean.printname();}}}実行後、次の情報は出力されます。
構成ファイル:ApplicationContext.xmlクラスcom.jvk.ken.spring.demo私はデモです。
上記の短いコードは、Springが最も単純なBean工場としてどのように機能するかを示しています。春に何が起こるかを分析するために、コードを少し下に調整しましょう。まず、デモクラスのパラメーターレス構造方法をプライベートに変更します。
private demo(){name = "I'm Demo。"; }テストコードを実行すると、スプリングテストの結果に違いはないことが明らかになりましたが、カスタマイズされたMyBeanFactoryは次のエラーメッセージを報告しました。
スレッドの例外 "main" java.lang.illegalaccessexception:class com.jvk.ken.spring.mybeanfactoryクラスcom.jvk.ken.spring.demoのメンバーにはアクセスできません。 java.lang.class.newinstance0(class.java:349)at java.lang.class.newinstance(class.java:308)のcom.jvk.ken.spring.mybeanfactory.getbean(mybeanfactory.java:12) com.jvk.ken.test.testnotspring(test.java:25)at com.jvk.ken.spring.test.main(test.java:9)
春はとても魔法のようですか?いいえ、私が書いたコードはあまりにも単純で、わずかな変更で直接実行できます。
public Object getBean(String ID)スロー例外{class class1 = beans.get(id); Constructor DeclaredConstructor = class1.getDeclaredConstructor(); delaredconstructor.setAccessible(true); return delaredconstructor.newinstance(); }上記は、Spring Containerが管理する最も純粋なJavabeanです。 SpringはFactory Beanと呼ばれる別のタイプのBeanもサポートしています。例は1000語よりも優れています。コードをご覧ください
パッケージcom.jvk.ken.spring; import org.springframework.beans.factorybean; public class demofactoryはfactorybean {@override public object getobject()throws {return new demo();}@public class getobjecttype(){return demo.cl.class@rutride class; 間違い;}}Demofactoryクラスを追加した後、スプリング構成ファイルを同時に変更します
<bean id = "demo" />
他のコードは変更されていません。テストコードを実行した後、出力結果は以前とまったく同じです。クラスcom.jvk.ken.spring.demofactoryがIDを構成するのはなぜですか?これは、SpringがDemofactoryがFactoryBeanインターフェイスを実装する特別な豆であることを検出するためです。 GetObjectメソッドは結果を返す前に呼び出されるため、最終結果はデモオブジェクトです。もちろん、工場の豆を本当に入手する必要がある場合は、このようなbf.getbean( "&demo")を書くことができます。
要約します
上記は、Spring実装Beanオブジェクト作成コードのすべての詳細な説明です。すべての人に役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!