注意“initMessage(String message, ArrayList
三、@Value:注入SpEL表达式;
用于注入SpEL表达式,可以放置在字段方法或参数上,使用方式如下:
Java代码
1. @Value(value = "SpEL表达式")
2. 字段、方法、参数
@Value(value = "SpEL表达式")
字段、方法、参数
1、可以在类字段上使用该注解:
Java代码
1. @Value(value = "#{message}")
2. private String message;
@Value(value = "#{message}")
private String message;
2、可以放置在带@Autowired注解的方法的参数上:
Java代码
1. @Autowired
2. public void initMessage(@Value(value = "#{message}#{message}") String message) {
3. this.message = message;
4. }
@Autowired
public void initMessage(@Value(value = "#{message}#{message}") String message) {
this.message = message;
}
3、还可以放置在带@Autowired注解的构造器的参数上:
Java代码
1. @Autowired
2. private TestBean43(@Value(value = "#{message}#{message}") String message) {
3. this.message = message;
4. }
@Autowired
private TestBean43(@Value(value = "#{message}#{message}") String message) {
this.message = message;
}
具体测试详见DependencyInjectWithAnnotationTest 类的testValueInject测试方法。
四、@Qualifier:限定描述符,用于细粒度选择候选者;
@Autowired默认是根据类型进行注入的,因此如果有多个类型一样的Bean候选者,则需要限定其中一个候选者,否则将抛出异常,详见【3.3.3 自动装配】中的根据类型进行注入;
@Qualifier限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者,具体使用方式如下:
Java代码
1. @Qualifier(value = "限定标识符")
2. 字段、方法、参数
@Qualifier(value = "限定标识符")
字段、方法、参数
(1)、根据基于XML配置中的
1.
其中type属性可选,指定类型,默认就是Qualifier注解类,name就是给Bean候选者指定限定标识符,一个Bean定义中只允许指定类型不同的
1、准备测试Bean:
Java代码
1. package cn.javass.spring.chapter12;
2. import javax.sql.DataSource;
3. import org.springframework.beans.factory.annotation.Autowired;
4. import org.springframework.beans.factory.annotation.Qualifier;
5.
6. public class TestBean31 {
7. private DataSource dataSource;
8. @Autowired
9. //根据
10. public void initDataSource(@Qualifier("mysqlDataSource") DataSource dataSource) {
11. this.dataSource = dataSource;
12. }
13. public DataSource getDataSource() {
14. return dataSource;
15. }
16. }
package cn.javass.spring.chapter12;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
public class TestBean31 {
private DataSource dataSource;
@Autowired
//根据
public void initDataSource(@Qualifier("mysqlDataSource") DataSource dataSource) {
this.dataSource = dataSource;
}
public DataSource getDataSource() {
return dataSource;
}
}
2、在Spring配置文件(chapter12/dependecyInjectWithAnnotation.xml)添加如下Bean配置:
Java代码
1.
我们使用@Qualifier("mysqlDataSource")来指定候选Bean的限定标识符,我们需要在配置文件中使用
Java代码
1.
2.
3.
3、测试方法如下:
Java代码
1. @Test
2. public void testQualifierInject1() {
3. TestBean31 testBean31 = ctx.getBean("testBean31", TestBean31.class);
4. try {
5. //使用
6. ctx.getBean("mysqlDataSource");
7. Assert.fail();
8. } catch (Exception e) {
9. //找不到该Bean
10. Assert.assertTrue(e instanceof NoSuchBeanDef