9. }
package cn.javass.spring.chapter12.qualifier;
//省略import
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface DataSourceType {
String ip(); //指定ip,用于多数据源情况
DataBase database();//指定数据库类型
}
3、准备测试Bean:
Java代码
1. package cn.javass.spring.chapter12;
2. import javax.sql.DataSource;
3. import org.springframework.beans.factory.annotation.Autowired;
4. import cn.javass.spring.chapter12.qualifier.DataBase;
5. import cn.javass.spring.chapter12.qualifier.DataSourceType;
6. public class TestBean34 {
7. private DataSource mysqlDataSource;
8. private DataSource oracleDataSource;
9. @Autowired
10. public void initDataSource(
11. @DataSourceType(ip="localhost", database=DataBase.MYSQL)
12. DataSource mysqlDataSource,
13. @DataSourceType(ip="localhost", database=DataBase.ORACLE)
14. DataSource oracleDataSource) {
15. this.mysqlDataSource = mysqlDataSource;
16. this.oracleDataSource = oracleDataSource;
17. }
18. //省略getter方法
19. }
package cn.javass.spring.chapter12;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import cn.javass.spring.chapter12.qualifier.DataBase;
import cn.javass.spring.chapter12.qualifier.DataSourceType;
public class TestBean34 {
private DataSource mysqlDataSource;
private DataSource oracleDataSource;
@Autowired
public void initDataSource(
@DataSourceType(ip="localhost", database=DataBase.MYSQL)
DataSource mysqlDataSource,
@DataSourceType(ip="localhost", database=DataBase.ORACLE)
DataSource oracleDataSource) {
this.mysqlDataSource = mysqlDataSource;
this.oracleDataSource = oracleDataSource;
}
//省略getter方法
}
4、在Spring配置文件(chapter12/dependecyInjectWithAnnotation.xml)添加如下Bean配置:
Java代码
1.
5、在Spring修改定义的两个数据源:
Java代码
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
6、测试方法如下:
Java代码
1. @Test
2. public void testQualifierInject3() {
3. TestBean34 testBean34 = ctx.getBean("testBean34", TestBean34.class);
4. Assert.assertEquals(ctx.getBean("mysqlDataSourceBean"), testBean34.getMysqlDataSource());
5. Assert.assertEquals(ctx.getBean("oracleDataSource"), testBean34.getOracleDataSoruce());
6. }
@Test
public void testQualifierInject3() {
TestBean34 testBean34 = ctx.getBean("testBean34", TestBean34.class);
Assert.assertEquals(ctx.getBean("mysqlDataSourceBean"), testBean34.getMysqlDataSource());
Assert.assertEquals(ctx.getBean("oracleDataSource"), testBean34.getOracleDataSoruce());
}
测试也通过了,说明我们扩展的@Qualifier限定描述符注解也能很好工作。
四、自定义注解限定描述符:完全不使用@Qualifier,而是自己定义一个独立的限定注解;
1、首先使用如下方式定义一个自定义注解限定描述符:
Java代码
1. package cn.javass.spring.chapter12.qualifier;
2. //省略import
3. @Target({ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER})
4. @Retention(RetentionPolicy.