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

2014-11-24 07:34:28 · 作者: · 浏览: 11
abase();//指定数据库类型
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.