スプリングアセンブリ
自動組立
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" )