スプリングアセンブリ

スプリングアセンブリ

自動組立

1 ) コンポーネントアセンブリ@Component 自動配線

2 ) @Configuration @ComponentScan  コンポーネントを自動配線

インターフェースの作成:

パッケージcom.bean;

パブリック インターフェイスTest_Auto_player {

     void player();

}

インターフェースの実装:

パッケージcom.bean;

org.springframework.stereotype.Componentをインポートします。

//コンポーネントによってスキャンされたBeanに名前を付けることができます。例: ,, //@Component("Test_Auto_player")または: //@Name("Test_Auto_player")

@Component//ここでコンポーネントを定義します

パブリック クラスTest_Auto_playerImpl はTest_Auto_playerを実装します{

   プライベート文字列タイトル= "タイトル" ;

   プライベート文字列コンテンツ= "コンテンツ" ;

   public void player() {

     システム。out .println(タイトル+ "コンテンツ****:" +コンテンツ);

   }}

パッケージをスキャンします:

パッケージ com.bean;

importorg.springframework.context.annotation.ComponentScan;

importorg.springframework.context.annotation.Configuration;

/**

 *表示構成 (理由: コンポーネントのスキャンが有効になっていない)

 * @ComponentScan : デフォルトで現在のパッケージをスキャンします

*/

@構成

@ComponentScan

パブリッククラスTest_AutoConfig {

}

テスト:

パッケージ com.bean;

staticorg.junit.Assert.*をインポートします。

org.junit.Test をインポートします。

importorg.junit.runner.RunWith;

importorg.springframework.beans.factory.annotation.Autowired;

importorg.springframework.test.context.ContextConfiguration;

importorg.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(classes=Test_AutoConfig.class)

パブリック クラス AutoTest{

  @Autowired//コンポーネントを注入します。一般に、エンタープライズ プロジェクトのコンポーネントはインターフェイスです。呼び出すとき、ダイレクトスプリングメカニズムは、インターフェイスの実装に対応するクラス メソッドを直接呼び出します。

  プライベート Test_Auto_player cd;

  @テスト

  public void cdShouldNotBeNull() {

   アサートノットヌル(cd);

  cd.player();//メソッドを直接呼び出します。実際には、インジェクション インターフェイスによって実装されたメソッドです。

  }

}

テスト中にエラーが報告されました:

理由は、jarパッケージcommons-loggingがないためです。

java.lang.NoClassDefFoundError: org / apache /commons/logging/LogFactory

    atorg.springframework.test.context.junit4.SpringJUnit4ClassRunner。<clinit> (SpringJUnit4ClassRunner.java:91)

    atsun.reflect.NativeConstructorAccessorImpl.newInstance0(ネイティブメソッド)

    atsun.reflect.NativeConstructorAccessorImpl.newInstance(ソース不明)

    atsun.reflect.DelegatingConstructorAccessorImpl.newInstance(ソース不明)

    atjava.lang.reflect.Constructor.newInstance(ソース不明)

    atorg.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)

    atorg.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)

    atorg.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)

    atorg.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)

    atorg.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)

    atorg.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)

    atorg.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:84)

    atorg.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:70)

    atorg.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:43)

    atorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)

    atorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)

    atorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)

    atorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

原因:java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory

    atjava.net.URLClassLoader$1.run(不明なソース)

    atjava.net.URLClassLoader$1.run(不明なソース)

    atjava.security.AccessController.doPrivileged(ネイティブメソッド)

    atjava.net.URLClassLoader.findClass(不明なソース)

    atjava.lang.ClassLoader.loadClass(ソース不明)

    atsun.misc.Launcher$AppClassLoader.loadClass(ソース不明)

    atjava.lang.ClassLoader.loadClass(ソース不明)

    ...さらに 18 件*/


 

XML スキャン コンポーネントを使用します。

test_autoConfig.xml

< context:component-scan base-package = "com.bean" ></ context:component-scan >

 

@ContextConfiguration ( "クラスパス:test_autoConfig.xml" )

おすすめ

転載: blog.csdn.net/qi95719/article/details/53793367