2. import org.springframework.beans.factory.annotation.Qualifier;
3. /** 表示注入Oracle相关 */
4. @Target({ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER})
5. @Retention(RetentionPolicy.RUNTIME)
6. @Qualifier
7. public @interface Oracle {
8. }
package cn.javass.spring.chapter12.qualifier;
import org.springframework.beans.factory.annotation.Qualifier;
/** 表示注入Oracle相关 */
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface Oracle {
}
2、准备测试Bean:
Java代码
1. package cn.javass.spring.chapter12;
2. //省略import
3. public class TestBean33 {
4. private DataSource mysqlDataSource;
5. private DataSource oracleDataSource;
6. @Autowired
7. public void initDataSource(@Mysql DataSource mysqlDataSource, @Oracle DataSource oracleDataSource) {
8. this.mysqlDataSource = mysqlDataSource;
9. this.oracleDataSource = oracleDataSource;
10. }
11. public DataSource getMysqlDataSource() {
12. return mysqlDataSource;
13. }
14. public DataSource getOracleDataSource() {
15. return oracleDataSource;
16. }
17. }
package cn.javass.spring.chapter12;
//省略import
public class TestBean33 {
private DataSource mysqlDataSource;
private DataSource oracleDataSource;
@Autowired
public void initDataSource(@Mysql DataSource mysqlDataSource, @Oracle DataSource oracleDataSource) {
this.mysqlDataSource = mysqlDataSource;
this.oracleDataSource = oracleDataSource;
}
public DataSource getMysqlDataSource() {
return mysqlDataSource;
}
public DataSource getOracleDataSource() {
return oracleDataSource;
}
}
3、在Spring配置文件(chapter12/dependecyInjectWithAnnotation.xml)添加如下Bean配置:
Java代码
1.
4、在Spring修改定义的两个数据源:
Java代码
1.
2.
3.
4.
5.
6.
7.
5、测试方法如下:
Java代码
1. @Test
2. public void testQualifierInject3() {
3. TestBean33 testBean33 = ctx.getBean("testBean33", TestBean33.class);
4. Assert.assertEquals(ctx.getBean("mysqlDataSourceBean"), testBean33.getMysqlDataSoruce());
5. Assert.assertEquals(ctx.getBean("oracleDataSource"), testBean33.getOracleDataSoruce());
6. }
@Test
public void testQualifierInject3() {
TestBean33 testBean33 = ctx.getBean("testBean33", TestBean33.class);
Assert.assertEquals(ctx.getBean("mysqlDataSourceBean"), testBean33.getMysqlDataSoruce());
Assert.assertEquals(ctx.getBean("oracleDataSource"), testBean33.getOracleDataSoruce());
}
测试也通过了,说明我们扩展的@Qualifier限定描述符注解也能很好工作。
前边演示了不带属性的注解,接下来演示一下带参数的注解:
1、首先定义数据库类型:
Java代码
1. package cn.javass.spring.chapter12.qualifier;
2. public enum DataBase {
3. ORACLE, MYSQL;
4. }
package cn.javass.spring.chapter12.qualifier;
public enum DataBase {
ORACLE, MYSQL;
}
2、其次扩展@Qualifier限定描述符注解
Java代码
1. package cn.javass.spring.chapter12.qualifier;
2. //省略import
3. @Target({ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER})
4. @Retention(RetentionPolicy.RUNTIME)
5. @Qualifier
6. public @interface DataSourceType {
7. String ip(); //指定ip,用于多数据源情况
8. DataBase dat