跳到主要内容
版本:7.0.3

Bean定义中的表达式

Hunyuan 7b 中英对照 Expressions in Bean Definitions

你可以使用SpEL表达式与配置元数据一起来定义bean实例。在这两种情况下,定义表达式的语法形式都是#{ <expression string> }

应用程序上下文中的所有bean都可以通过它们常见的bean名称作为预定义变量来访问。这包括标准的上下文bean,如environment(类型为org.springframework.core.env.Environment),以及systemPropertiessystemEnvironment(类型为Map<String, Object>),用于访问运行时环境。

要指定默认值,可以在字段、方法以及方法或构造函数的参数(或其XML等效形式)上添加@Value注解。

以下示例设置了一个字段的默认值:

public class FieldValueTestBean {

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

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

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

请注意,在这里你不必在预定义变量前加上#符号。

以下示例展示了在属性设置器(property setter)方法上的等效实现:

public class PropertyValueTestBean {

private String defaultLocale;

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

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

被注入(Autowired)的方法和构造函数也可以使用@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;

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

// ...
}

您也可以通过名称引用其他bean属性,如下例所示:

public class ShapeGuess {

private double initialShapeSeed;

@Value("#{ numberGuess.randomNumber }")
public void setInitialShapeSeed(double initialShapeSeed) {
this.initialShapeSeed = initialShapeSeed;
}

public double getInitialShapeSeed() {
return initialShapeSeed;
}
}