達成するためにIOCとDIの注釈に基づきA.
1.注:
注釈注射を使用する場合、無設定方法。
注釈ベースの統合、インポートの制約は、コンテキスト・ネームスペースのインポート制約の多くを必要とします。
<?XMLバージョン= "1.0"エンコード= "UTF-8" ?> < 豆のxmlns = "http://www.springframework.org/schema/beans" のxmlns:コンテキスト= "http://www.springframework.org/schema /コンテキスト" のxmlns:XSI = "http://www.w3.org/2001/XMLSchema-instance" のxsi:schemaLocationの=" http://www.springframework.org/schema/beans のhttp://www.springframework。 ORG /スキーマ/豆/春-beans.xsd のhttp://www.springframework。 ORG /スキーマ/コンテキストhttp://www.springframework.org/schema/context/spring-context.xsd」>
リソースの2. @Component注釈構成管理
@Component( "AccountServiceの" ) パブリック クラス AccountServiceImplは実装IAccountService { プライベートIAccountDao accountDaoを。 公共 ボイドsetAccountDao(IAccountDao accountDao){ この .accountDao = accountDao。 } } @Component( "accountDao" ) パブリック クラス AccountDaoImplが実装IAccountDao { プライベートDBAssit dbAssitと、 }
bean.xmlに配置された3
<! - コンテナをスキャンするスプリングパッケージを知らせるために作成されます- > < コンテキスト:スキャンコンポーネントベース・パッケージ=「com.itheima」> </ コンテキスト:コンポーネントスキャン> <! - 設定dbAssit - > < 豆ID = "dbAssit" クラス= "com.itheima.dbassit.DBAssit" > < プロパティ名= "データソース" REF = "データソース" > </ プロパティ> </ 豆> <! - コンフィギュレーション・データ・ソース- > < 豆上記ID =「データソース」クラス= "com.mchange.v2.c3p0.ComboPooledDataSource"> < プロパティ名= "driverClass" 値= "はcom.mysql.jdbc.Driver" > </ プロパティ> < プロパティ名= "jdbcUrlと" 値= "はjdbc:mysqlの:/// spring_day02" > </ プロパティ> < プロパティ名前= "ユーザー" 値= "ルート" > </ プロパティ> < プロパティ名= "パスワード" 値= "1234" > </ プロパティ> </ 豆>
4.共通アノテーション
(1)@Componentは:豆を対応します
(2)@Controller:プレゼンテーション層ビーン
@Service:ビジネス層豆
@Repository:永続層豆
(3)@Autowired:自動注射器のタイプに応じて可変、コンテナ内の最初のチェッククラスは、エラーがない場合、その型のオブジェクトが複数存在する場合、オブジェクト名は注射によると検索し、該当するオブジェクト名が指定されていない場合。それだけで、他のBeanタイプに注入することができます。
自動注入の種類に応じ。注釈注入性を使用する場合、設定された方法を省略することができます。それだけで他のBeanタイプに注入することができます。豆IDとしてオブジェクト変数名を用いて注入される試合の複数の種類が存在する場合には、春のコンテナを見つけ、あなたも成功し、注射を見つけることができます。エラーで見つけることができません。
(4)@Qualifier:アクション:タイプに応じて自動的にビーン補充IDに従って、噴射に基づきます。フィールド注入は、@Autowireと一緒に使用しなければならない場合には、独立して使用することはできません。しかし、パラメータの注入方法は、独立して使用することができるとき。プロパティ:値:豆IDを指定します。
(5)@Resource:アクション:ビーンIDに従って直接注入。それだけで他のBeanタイプに注入することができます。属性:名前:豆のIDを指定します。
(6)@value:アクション:注入性とString型のデータの基本データタイプ:値:値を指定します
(7)また@valueに、他の豆型注入のみ
(8)@Scope:アクション:スコープBeanを指定します。属性:値:指定された範囲の値。値:シングルトンプロトタイプ要求セッションglobalsession
(9)@PostConstruct処置:初期化方法を指定します。
(10)@PreDestroy作用:破壊の方法を指定します。
5.新しい注釈は、(その他の構成は、変換bean.xmlクラスの構成です)
(1)@Configurationの
動作:現在のクラスをSpring構成クラスを指定するために使用され、クラスは、コンテナ作成注釈からロードされることになります。コンテナを取得(@Configurationがクラスの.classを注釈を付けている)AnnotationApplicationContextを使用する必要があります。属性:値:設定指定されたバイトコードのクラスのための
それは、カテゴリ(SpringConfigration)で設定ファイル(bean.xmlを)持っている代わりに、
@Configuration パブリック クラスSpringConfiguration { }
(2)@ComponentScan
効果:スプリングがパッケージをスキャンするために初期化コンテナーを指定するために使用されます。XML設定ファイルに作用するばね:<コンテキスト:コンポーネント・スキャンベース -package =「com.itheima」/>は同じです。プロパティ:basePackages:スキャンするパケットを指定します。同じコメントのプロパティの役割と価値。
@Configuration @ComponentScan( "com.itheima" ) パブリック クラス SpringConfiguration {}
パッケージをスキャンするように構成されています
(3)@Bean
役割:このアノテーションのみ容器にこの方法を使用してオブジェクト、及びばねを作成することを示し、方法に書き込むことができます。属性:名前:(つまり、ビーンIDである)の名前を指定するために、現在の@Bean注釈方法でオブジェクトを作成します。
/ ** *接続構成データベースクラス * / パブリック クラスJdbcConfig { / ** *データ・ソースを作成し、ばねコンテナに格納されている* @return * / @Bean(名 =「データソース」) 公衆データソースCreateDataSource(){ 試し{ ComboPooledDataSource DS = 新新ComboPooledDataSource(); ds.setUser( "ルート" ); ds.setPassword( "1234" ); ds.setDriverClass( "はcom.mysql.jdbc.Driver" ); ds.setJdbcUrl(「JDBC: mysqlの:/// spring_day02 "); 戻りDS; } キャッチ(例外E){ スロー 新しい新しいのRuntimeException(E); } } / ** * DBAssitを作成し、また、春のコンテナに格納された* @param のdataSource * @return * / @Bean(名 = "dbAssit" ) 公衆DBAssit createDBAssit(データソースデータソースが){ 戻り 新しい新; DBAssit(データソース) } }
データソースとDBAssitは、あなたがbean.xmlを削除することができ、設定ファイルから削除されて。
(4)設定ファイルが存在しない場合、データソースの構成を作成し、クラスに符号化されます。それからそれらを構成する方法
@PropertySourceはの.propertiesファイル構成をロードするために使用されます。たとえば、私たちは、情報がデータベース接続プロパティの設定ファイルに書き込むことができるデータソースを設定するには、コンフィギュレーションファイルプロパティの場所を指定するには、このアノテーションを使用することができます。属性:値は[]:ファイルの場所のプロパティを指定します。あなたがクラスパスにある場合は、クラスパスに記述する必要があります。
/ ** *構成データベースの接続クラス * / パブリック クラスJdbcConfig { @value( "jdbc.driverの$ {}" ) プライベート文字列ドライバ、 @value( "jdbc.urlの$ {}" ) プライベート文字列のURL、 @value( "$ {} jdbc.username" ) プライベート文字列名; @valueは、( "jdbc.passwordの$ {}" ) プライベート文字列のパスワードは、 / ** *データソースを作成し、春のコンテナに格納* @return * / @豆(名 =「データソース」) 公衆データソースCreateDataSource(){ 試す{ ComboPooledDataSource dsは = 新しいComboPooledDataSource(); ds.setDriverClass(ドライバ)。 ds.setJdbcUrl(URL); ds.setUser(ユーザー名); ds.setPassword(パスワード); 戻るDSを。 } キャッチ(例外e){ スロー 新規のRuntimeException(e)前記 } } }
(5)私たちは2つのクラスの構成を有しているが、彼らは何の関係もありません。どのように彼らの関係を構築するには?
@import
効果:クラスを導入したときに他の構成を導入するためのクラス、その他の構成、@Configuration注釈を書き込むことはできません。もちろん、上の書き込みに問題はありません。属性:値は[]:クラスのバイトコードの他の構成を指定します。
@Configuration @ComponentScan(basePackages = "com.itheima.spring" ) @import({。JdbcConfig クラス}) パブリック クラスSpringConfiguration { } @Configuration @PropertySource( "クラスパス:jdbc.properties" ) パブリック クラスJdbcConfig { }
(6)コンフィギュレーションファイルが存在しない場合には、どのようにコンテナにそれを取得するには?
ApplicationContextのAC = 新しい AnnotationConfigApplicationContext(SpringConfiguration。クラス);
二.JUnitと注釈の設定:
*目的:試験方法に直接書き込むためには、コンテナそれを得るために、手動のコーディングを必要とせずに、時間をテストすることができます
パブリック クラスAccountServiceTest { プライベートのApplicationContext AC = 新 ClassPathXmlApplicationContext( "bean.xml" ); プライベート = ac.getBeanとしてIAccountService( "AccountServiceの"、IAccountService。クラス); }
(1)リーダーパケット
@RunWithを使用して、(2)置換動作
@RunWith(SpringJUnit4ClassRunner.class)パブリッククラスAccountServiceTest {}
(3)バネ構成ファイル@ContextConfiguration指定された場所を使用して
@RunWith(SpringJUnit4ClassRunner クラス) @ContextConfiguration(位置 = { "クラスパス:bean.xml" }) パブリック クラス AccountServiceTest {}
@ContextConfiguration注:場所は属性:設定ファイルの場所を指定します。show属性クラス:パスがクラスである場合は、クラスパスを必要とするクラスがアノテーションを指定するために使用されます。XML設定使用していないときは、このプロパティは必要注釈の位置を指定します。
(4)試験データクラス変数注射@Autowiredを使用して
@RunWith(SpringJUnit4ClassRunner クラス) @ContextConfiguration(場所は:= { "クラスパスbean.xml" }) パブリック クラスAccountServiceTest { @Autowired プライベートとしてIAccountService。 }