Spring零配置通过注解实现Bean依赖注入总结(七)

2014-11-24 07:34:28 · 作者: · 浏览: 4
2.qualifier;
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