Part III. 核心技术-10. Spring EL 表达式-10.4 表达式支持定义bean定义

Spel表达式可以与XML或基于注解的配置元数据一起使用,用于定义BeanDefinitions。 在这两种情况下,定义表达式的语法格式为#{<expression string>}

10.4.1基于XML的配置

可以使用如下所示的表达式设置属性或构造函数arg值。

<bean id="numberGuess" class="org.spring.samples.NumberGuess">
<property name="randomNumber" value="#{ T(java.lang.Math).random() * 100.0 }"/>

<!-- other properties -->
</bean>

变量systemProperties是预定义的,因此可以在您的表达式中使用它,如下所示。 请注意,您不必在此上下文中使用符号将预定义变量前缀。

<bean id="taxCalculator" class="org.spring.samples.TaxCalculator">
<property name="defaultLocale" value="#{ systemProperties['user.region'] }"/>

<!-- other properties -->
</bean>

您也可以通过名称引用其他bean属性。

<bean id="numberGuess" class="org.spring.samples.NumberGuess">
<property name="randomNumber" value="#{ T(java.lang.Math).random() * 100.0 }"/>

<!-- other properties -->
</bean>

<bean id="shapeGuess" class="org.spring.samples.ShapeGuess">
<property name="initialShapeSeed" value="#{ numberGuess.randomNumber }"/>

<!-- other properties -->
</bean>

10.4.2基于注解的配置

@Value注解可以放置在字段,方法和方法/构造函数参数上以指定默认值。

这是一个设置字段变量默认值的示例。

public static class FieldValueTestBean

@Value("#
{ systemProperties['user.region'] }")
private String defaultLocale;

public void setDefaultLocale(String defaultLocale) {
this.defaultLocale = defaultLocale;
}

public String getDefaultLocale() {
return this.defaultLocale;
}

}

等效但属性设置方法如下所示。

public static class PropertyValueTestBean

private String defaultLocale
;

@Value("#{ systemProperties['user.region'] }")
public void setDefaultLocale(String defaultLocale) {
this.defaultLocale = defaultLocale;
}

public String getDefaultLocale() {
return this.defaultLocale;
}

}

自动装配方法和构造函数也可以使用@Value注解。

public class SimpleMovieLister {

private MovieFinder movieFinder;
private String defaultLocale;

@Autowired
public void configure(MovieFinder movieFinder,
@Value("#{ systemProperties['user.region'] }")
String defaultLocale)
{
this.movieFinder = movieFinder;
this.defaultLocale = defaultLocale;
}

// ...
}
public class MovieRecommender {

private String defaultLocale;

private CustomerPreferenceDao customerPreferenceDao;

@Autowired
public MovieRecommender(CustomerPreferenceDao customerPreferenceDao,
@Value("#{systemProperties['user.country']}")
String defaultLocale)
{
this.customerPreferenceDao = customerPreferenceDao;
this.defaultLocale = defaultLocale;
}

// ...
}

你可能感兴趣的:(Part III. 核心技术-10. Spring EL 表达式-10.4 表达式支持定义bean定义)