ジャーパッケージ構成ファイルと輸入制限を無視スキーマBenpianノート
私はIOCの理解1.を
、IOCの制御の反転は、春には、私が作成するために、春に引き渡されるIOCオブジェクトを作成する必要性を理解しています。春には、オブジェクトを作成し、春のコンテナを置くために反射によって、スプリングをできるように設定することができます。このように、あなただけのid属性の設定を使用して取得するために、他の場所を呼び出すために必要がある場合。
設定あなたは、特定の実装クラスを設定することができます、また、パッケージ、クラス名の最初の文字を小文字にすべてのクラスのIDのデフォルトの次のパッケージを設定することができます。
<bean id="testService" class="com.jdwa.service.impl.TestServiceImpl"></bean>
三つの方法豆で作成2.ioc
デフォルトコンストラクタ:<bean id="testService" class="com.jdwa.service.impl.TestServiceImpl"></bean>
staticファクトリ:<bean id="testService" class="com.jdwa.factory.StaticFactory" factory-method="createTestService"></bean>
インスタンスの工場:
<bean id="instancFactory" class="com.jdwa.factory.InstanceFactory"></bean>
<bean id="testService" factory-bean="instancFactory" factory-method="createTestService"></bean>
3.beanライフサイクル
シングルトン:、アンロードの破壊をアプリケーションがロードされるときに作成されたコンテナを作成し、
多くの場合:ガベージコレクションをリサイクルの破壊によって使用されたときと同じ通常のオブジェクトを、それが作成されます
4.依存性注入(依存性注入)
依存性注入はIOCスプリングコアフレームワークの特定の実装です。
我々はオブジェクトを作成するコードを記述すると、スプリングに引き渡されていますが、コードが起こることができない状況に依存しません。IOCデカップリングは、ただの依存を減らし、なくすことはできません。
特定の状況のために、我々は、ビジネス層に永続化層を注入するためにそのような必要があるとして。
簡単に言えば、我々は、オブジェクトを注入するフレームが入ってくるために、私たち自身を取りに行くしないでください待ちます。
依存性注入3つの一般的な方法:
コンストラクタ注入は、注入法、P名前空間注射(物質の注射または設定方法)を設定します
5.注釈IOCに基づい
まず、認知注釈がなければならない、と注釈構成XML構成機能は同じで実装される、プログラム間の結合を低減することです。フォームを設定するだけで同じではありません。
一般的なノート、代替XML、および役割
|ノート|代替XML |アクション|
|: - :|: - :|: - :|
| @Component |
| @Controller |
| @Service |
| @Repository |
| @Autowired | <プロパティ名= ""値=「>または
| @修飾子| / |名前で注入による注入の種類に応じインチ アローンフィールドを注入するために使用することはできません、それは@Autowiredと一緒に使用する必要があります。|時にメソッドのパラメータには、単独で使用することができます
直接注入によるIDビーン| | @Resource | /。それが唯一の他のBeanタイプに注入することができる|
| @value | / |注入基本データ型とのStringデータ型|
| @Scope |
| @PostConstruct |
| @PreDestroy |
注釈後6は、リハビリテーションに関連する問題に基づいていると
もちょうど開発に完全にコメントしたい、XMLを除去する問題にも対処する必要がある
設定ファイルを読み込み、コンテナが通知することで、サードパーティのリソースは、XMLの設定が必要
<!-- 告知spring框架在,读取配置文件,创建容器时,扫描注解,依据注解创建对象,并存入容器中 -->
<context:component-scan base-package="com.jdwa"></context:component-scan>
<!-- 配置 dbAssit -->
<bean id="dbAssit" class="com.itheima.dbassit.DBAssit">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 配置数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql:///spring_day02"></property>
<property name="user" value="root"></property>
<property name="password" value="1234"></property>
</bean>
次の手順を解決する:
ステップ1を:
@Configuration
public class SpringConfiguration {
}
@Configuration
注釈は、現在のクラスを指定するために使用されたスプリングクラス構成であるコンテナを作成するときに、クラスのノートからロードされます。コンテナを取得(@Configurationがクラスの.classを注釈を付けている)AnnotationApplicationContextを使用する必要があります。
ステップ2:
@Configuration
@ComponentScan("com.jdwa")
public class SpringConfiguration {
}
コンテナをスキャンするために、初期化パッケージで指定するための@ComponentScan春。XML設定ファイルと春の役割:
第三段階:
public class JdbcConfig {
@Bean(name="runner")
@Scope("prototype")
public QueryRunner createQueryRunner(@Qualifier("ds2") DataSource dataSource){
return new QueryRunner(dataSource);
}
@Bean(name="ds2")
public DataSource createDataSource(){
try {
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setDriverClass(driver);
ds.setJdbcUrl(url);
ds.setUser(username);
ds.setPassword(password);
return ds;
}catch (Exception e){
throw new RuntimeException(e);
}
}
@Bean(name="ds1")
public DataSource createDataSource1(){
try {
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setDriverClass(driver);
ds.setJdbcUrl("jdbc:mysql://localhost:3306/eesy02");
ds.setUser(username);
ds.setPassword(password);
return ds;
}catch (Exception e){
throw new RuntimeException(e);
}
}
}
唯一の方法でメモを書く@Bean、容器内にこの方法を使用してオブジェクト、及びばねを作成することを示しました。
ステップ4:
@PropertySource("classpath:jdbcConfig.properties")
public class JdbcConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
/**
* 用于创建一个QueryRunner对象
* @param dataSource
* @return
*/
@Bean(name="runner")
@Scope("prototype")
public QueryRunner createQueryRunner(@Qualifier("ds2") DataSource dataSource){
return new QueryRunner(dataSource);
}
/**
* 创建数据源对象
* @return
*/
@Bean(name="ds2")
public DataSource createDataSource(){
try {
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setDriverClass(driver);
ds.setJdbcUrl(url);
ds.setUser(username);
ds.setPassword(password);
return ds;
}catch (Exception e){
throw new RuntimeException(e);
}
}
@Bean(name="ds1")
public DataSource createDataSource1(){
try {
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setDriverClass(driver);
ds.setJdbcUrl("jdbc:mysql://localhost:3306/eesy02");
ds.setUser(username);
ds.setPassword(password);
return ds;
}catch (Exception e){
throw new RuntimeException(e);
}
}
}
@PropertySourceはの.propertiesファイル構成をロードするために使用されます。たとえば、私たちは、情報がデータベース接続プロパティの設定ファイルに書き込むことができるデータソースを設定するには、コンフィギュレーションファイルプロパティの場所を指定するには、このアノテーションを使用することができます。
ステップ5:
@ComponentScan("com.itheima")
@Import(JdbcConfig.class)
@PropertySource("classpath:jdbcConfig.properties")
public class SpringConfiguration {
}
クラスを導入したときに他の構成を導入するための@importクラスは、他の構成は、@Configuration注釈を書き込むことはできません。もちろん、書き込みに問題はありません
ステップ6:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfiguration.class)
public class AccountServiceTest {}
若しくは
ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);
@ContextConfiguration(位置は= {「クラスパスは:bean.xml」})コンフィギュレーションファイルをロードすることで、上記のコードは、クラスをロードするように構成されています
------莫道君行早,更有早行人------