1つの基本的なスプリング機能
春は非常にアクティブなオープンソースフレームワークです。これは、Coreに基づいて多層Javaeeシステムを構築するフレームワークであり、その主な目的はエンタープライズ開発を簡素化することです。
Springは、非侵襲的な方法でコードを管理します。 Springは「最小侵入」を提唱しています。つまり、適切な時期にスプリングをインストールまたはアンインストールでき、春はJavaを明るくします。 (オープンおよびクロージャーの原則)、ここに閉じる原則があります。
2。スプリングを開発するために必要なツール
(ここでは、最初に春2.5を選択し、次に3.0を選択します)
2.1スプリングの瓶パッケージ
springをhttp://www.springsource.org/downloadでダウンロードしてから、減圧ディレクトリで次のJARファイルを見つけて、ClassPathにコピーします
- スプリングのコアクラスライブラリはdist/spring.jarのspringドキュメントの下のjarです
- 導入されたサードパーティライブラリは、lib、lib/jakarta-commons/commons-logging.jarの下のすべての春の文書です。
- アスペクトプログラミング(AOP)が使用されている場合、次のjarファイルlib/asdapej/saspejweaver.jarおよびsaspejrt.jarlib/cglib/cglib-nodep-2.1_3.jarも必要です
- @resource/@postconstruct/@predestroyなど、JSR-250の注釈を使用する場合、次のJARファイルlib/j2ee/common-annotations.jarも必要です
注:JSR(Java仕様リクエスト)は、JCP(Javaコミュニティプロセス)に標準化された技術仕様を追加する正式なリクエストを指します。誰でもJSR(Java仕様リクエスト)を送信して、Javaプラットフォームに新しいAPIとサービスを追加できます。 JSRはJavaの世界で重要な基準になっています
2.2スプリング構成ファイル
デフォルトでは、ApplicationContext.xmlファイルです。多くのXMLファイルを作成でき、これは一般にプロジェクトで構成されています。 (SRCディレクトリで作成)
3スプリングの基本機能の詳細な説明
3.1 Springioc
Springの制御反転:作成、初期化、破壊、およびスプリングコンテナへのオブジェクトのその他のタスクを引き渡します。スプリングコンテナでオブジェクトのライフサイクルを制御します。
ステップ:
•a。スプリングコンテナを起動します
1. ClassPathで構成ファイルを見つけて、コンテナをインスタンス化する
コードコピーは次のとおりです。ApproachContextCTX= new ClassPathXMLApplicationContext(new String [] {"ApplicationContext.xml"});
classpath全体でxmlファイルを探すことができます
*この方法でロードします。 Spring構成ファイルを現在のプロジェクトのClassPathパスの下に配置する必要があります
* ClassPathパスとは、現在のプロジェクトのSRCディレクトリを指します。これは、Javaソースファイルのストレージ場所です。
2。ファイルシステムパスで構成ファイルを見つけて、コンテナをインスタンス化する
Springの構成ファイルは、複数の構成ファイルを指定でき、文字列配列を介して渡すことができます。
注:最初の方法を使用してコンテナを頻繁に起動する
•b。スプリングコンテナからオブジェクトを抽出します
スプリングコンテナ構造:
3.2エイリアス
<beans> <alias name = "person" alias = "p" ///エイリアスはエイリアスです。Pを介してPerson Beanを取得できます。 <bean name = "person"/> </beans>
このような構成では、1つの場所で命名し、複数の場所で異なる名前を使用する効果を実現できます。
3.3スプリングコンテナ内部オブジェクト
1オブジェクトを作成する方法
1.1パラメーターコンストラクターなし
<bean id = "helloworld"> </bean>
1.2静的工場法
<bean id = "helloworld2"
Factory-Method = "getInstance"> </bean>
1.3ファクトリーメソッドの例
<bean id = "helloworldfactory"> </bean>
<bean id = "helloworld3" factory-bean = "helloworldfactory" factory-method = "getInstance"> </bean>
コンセプトを覚えておいてください。最初の方法は最も使用されていますが、他のツールと統合する場合、インスタンスファクトリモデルが使用されます。
例:
ApplicationContext.xmlを構成します
<?xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!クラス - > <bean id = "helloworld"> </bean> <!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Factory-Method = "GetInstance" ></bean><!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
エンティティクラスのhelloworldを作成します
パッケージcom.itheima10.spring.createobject; public class helloworld {public void hello(){system.out.println( "hello"); }}静的な工場Helloworldfactoryを確立します
パッケージcom.itheima10.spring.createobject.method; public class helloworldfactory {public static helloworld getInstance(){system.out.println( "static method");新しいhelloworld()を返します。 }}物理的な工場Helloworldfactory2を確立します
パッケージcom.itheima10.spring.createobject.method; public class helloworldfactory2 { / ***メソッドは* @return* / public helloworld getInstance(){return new helloworld()と呼ばれる前に、工場オブジェクトを作成する必要があります。 }}テスト方法を作成してくださいobjectmethodtestを作成します
パッケージcom.itheima10.spring.createobject.method; import org.junit.test; import org.springframework.context.applicationcontext; import org.springframework.context.support.classpathxmlapplicatextext; CreateObjeTMETHODTEST { / ***デフォルトでは、スプリングコンテナはクラスのデフォルトコンストラクターを呼び出してオブジェクトを作成します* / @TEST public void testCreateObject_default(){applicationContext Context = new ClassPathxMLApplicationContext( "ApplicationContext.xml"); Helloworld Helloworld =(Helloworld)Context.getBean( "Helloworld"); helloworld.hello(); }/***静的工場を使用してオブジェクトを作成します* <bean id = "helloworld2" factory-method = "getInstance"> </bean> spring container ove:getInstanceメソッドはhelloworldfactoryクラス*/@test public void testcreateobject_staticfactory(){アプリケーションコントコンテスト=新しいclassPathXMLApplicationContext( "ApplicationContext.xml"); Helloworld Helloworld =(HelloWorld)Context.getBean( "HelloWorld2"); helloworld.hello(); }/** * Instance Factoryメソッドはオブジェクトを作成します * <bean id = "helloworldfactory" *> </bean id = "helloworld3" factory-bean = "helloworldactory" Factory-method = "getinstance"> </bean> spring containtの内部で何をするか。 object*/ @test public void testcreateobject_instanceFactory(){applicationContext Context = new ClassPathxMLApplicationContext( "ApplicationContext.xml"); Helloworld HelloWorld =(HelloWorld)Context.getBean( "HelloWorld3"); helloworld.hello(); }}2オブジェクトの範囲
オブジェクトの範囲には、シングルトンとプロトタイプの2つのプロパティがあります。シングルトンはシングルトンを意味します
2.1シングルトン(デフォルト値)
各スプリングIOCコンテナには、1つのオブジェクトインスタンス(共有)のみがあります。
2.2プロトタイプ
豆を複数回インスタンス化できるようにします(1つのインスタンスを使用して1つのインスタンスを作成します)。 Springは、プロトタイプBeanのライフサイクル全体に責任を負うことはできません。これは、プロトタイプのスコープされたオブジェクトについて明確にし、プロトタイプBeanが保有する高価なリソースを解放することはクライアントの責任であることを意味します。
<bean id = "helloworld" scope = "singleton"> </bean>
<bean id = "helloworld" scope = "prototype"> </bean>
HelloWorldクラスを作成します
public class helloworld {public list <string> lists = new ArrayList <String>(); public helloworld(){system.out.println( "new instance"); } public void hello(){system.out.println( "hello"); }}テストクラスを作成します
パッケージcom.itheima10.spring.scope; import org.junit.test; import org.springframework.context.applicationcontext; Import org.springframework.context.support.classpathxmlapplicationcontext; public containerに掲載された場合、sing scopetest;スプリングコンテナとこのクラスはシングルトンであるため、クラスのプロパティは共有されますHelloworld hello1 =(helloworld)Context.getBean( "Helloworld"); hello1.lists.add( "aaaa"); hello2 =(helloworld)context.getbean( "helloworld"); hello2.lists.add( "bbbb"); system.out.println(helloworld.lists.size()); // 2、および新しいインスタンスのみのみ}/** *スプリングの構成ファイルが次のとおりである場合: * <bean id = "helloworld" scope = "prototype"> </bean> @test public void void testcreateobject_scope_prototy(){アプリケーションコントテキスト=新しいclassPathXMLApplicationContext( "ApplicationContext.xml"); Helloworld hello1 =(helloworld)Context.getBean( "Helloworld"); hello1.lists.add( "aaaa"); hello2 =(helloworld)context.getbean( "helloworld"); hello2.lists.add( "bbbb"); System.out.println(helloworld.lists.size()); // 1、および新しいインスタンスのみを出力}}}3初期化時間
レイジーロード - デフォルトでは、コンテナが起動すると豆が初期化されますが、Beanノードの怠zyinit = "True"を指定して、Beanの初期化を遅らせることができます。この時点で、Beanは初めてBeanが取得された場合にのみ初期化されます。のように:
<bean id = "xxx" lazy-init = "true"/>
すべての豆に遅延した初期化を適用する場合は、次のように、ルートビーンズでデフォルトラジー-Init = "true"を設定できます。
<beans default-lazy-init = "true" ...>
Springは、デフォルトで起動時にすべてのシングルトンビーンズを事前にインスタンス化します。早期インスタンス化とは、初期化の一部として、ApplicationContextがすべてのSingleton Beanを自動的に作成および構成することを意味します。これは通常良いことです。このようにして、構成内のエラーはすぐに発見できるためです。
怠zyinitは偽です。スプリングコンテナは、開始時にエラーを報告します(より良い方法)
怠zyinitは真実であり、スプリングコンテナはクラスを呼び出すときにエラーを犯します。
ApplicationContext.xmlを構成します
<bean id = "helloworld" scope = "prototype"> </bean> </beans>
テストクラスの作成Object Whentestを作成します
パッケージcom.itheima10.spring.createobject.when; import org.junit.test; import org.springframework.context.applicationcontext; import org.springframework.context.support.classpathxmlapplicationcontext;公開クラスCreated b。 Helloworld Object*3。ObjectCalling Method** <Bean Id = "Helloworld"> </Bean> <Bean id = "Helloworld2"> </Bean> 2つの豆がスプリングコンテナで宣言されるため、2つのオブジェクトを作成する必要があります。そして、エラーは特に早期に表示されます。 Beanが大量のデータを保存している場合、この方法は良くなく、データはメモリに早く保存される可能性があります。 Beanがシングルトンではない場合、どのように構成されていても、コンテキストの場合、オブジェクトは作成する必要があります。GetBean*/ @Test public void testCreateObject_when_default(){ApplicationContext Context = new ClassPathXMLApplicationContext( "ApplicationContext.xml"); context.getBean( "Helloworld"); } /*** <bean id = "helloworld" lazy-init = "true"> < /bean>* order* 1。context.getbean* 3を起動します。 Beanが大量のデータを保存する場合、必要に応じてデータをロードする必要があります*/ @test public void testcreateobject_when_lazy(){applicationContext Context = new ClassPathxMLApplicationContext( "ApplicationContext.xml"); context.getBean( "Helloworld"); }}4 init、メソッドを破壊します
春が豆を初期化したり豆を破壊したりすると、一部の処理が必要な場合があるため、春は豆を作成および分解するときに豆の2つのライフサイクル方法を呼び出すことができます。操作する方法を指定できます。
<bean id = "foo" class = "... foo" init-method = "setup" decoration-method = "terowdown"/>
fooがスプリング容器にロードされたら、init-methodメソッドを呼び出します。 deployment-methodを呼び出し、fooがコンテナから削除されたとき(scope = singleton valid)
Helloworldを書く
public class helloworld {public helloworld(){system.out.println( "new instance"); } public void init(){system.out.println( "init"); } public void Destroy(){System.out.println( "Destroy"); } public void hello(){system.out.println( "hello"); }}テストクラスのinitdestroytestを書き込みます
パッケージcom.itheima10.spring.ioc.initdestroy; Import org.junit.test; import org.springframework.context.applicationcontext; import org.springframework.context.support.classpathxmlapplicationcontext; 1。スプリングコンテナを起動*2。HelloWorldオブジェクトを作成* 3。initメソッド*スプリングコンテナ内の自動実行*4。オブジェクト呼び出し方法* 5。破壊方法はスプリングコンテナが閉じているときにのみ実行できます。 *スプリングコンテナでは、1つのBeanがシングルトンである場合にのみ、スプリングコンテナがオブジェクトの作成、初期化、破壊に責任があります* Beanがシングルトンではない場合、スプリングコンテナは作成と初期化のみを担当します*/ @test public void testinitdestroy(){application -context context = new classpathxmlapplicationcontext Helloworld Helloworld =(Helloworld)Context.getBean( "Helloworld"); helloworld.hello(); classPathXMLApplicationContext ApplicationContext =(classPathxMLApplicationContext)Context; applicationContext.close(); }}実行シーケンス図:
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。