最新の安定バージョンについては、Spring Framework 6.2.6 を使用してください! |
Bean 定義の式
BeanDefinition
インスタンスを定義するために、XML ベースまたはアノテーションベースの構成メタデータで SpEL 式を使用できます。どちらの場合も、式を定義する構文は #{ <expression string> }
の形式です。
XML 構成
次の例に示すように、式を使用してプロパティまたはコンストラクターの引数値を設定できます。
<bean id="numberGuess" class="org.spring.samples.NumberGuess">
<property name="randomNumber" value="#{ T(java.lang.Math).random() * 100.0 }"/>
<!-- other properties -->
</bean>
アプリケーションコンテキスト内のすべての Bean は、共通の Bean 名を持つ定義済み変数として使用できます。これには、ランタイム環境にアクセスするための environment
(型 org.springframework.core.env.Environment
の)および systemProperties
および systemEnvironment
(型 Map<String, Object>
の)などの標準コンテキスト Bean が含まれます。
次の例は、systemProperties
Bean への SpEL 変数としてのアクセスを示しています。
<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>
アノテーション設定
デフォルト値を指定するには、フィールド、メソッド、メソッドまたはコンストラクターのパラメーターに @Value
アノテーションを配置できます。
次の例では、フィールドのデフォルト値を設定します。
Java
Kotlin
public class FieldValueTestBean {
@Value("#{ systemProperties['user.region'] }")
private String defaultLocale;
public void setDefaultLocale(String defaultLocale) {
this.defaultLocale = defaultLocale;
}
public String getDefaultLocale() {
return this.defaultLocale;
}
}
class FieldValueTestBean {
@Value("#{ systemProperties['user.region'] }")
var defaultLocale: String? = null
}
次の例は、同等のプロパティ setter メソッドを示しています。
Java
Kotlin
public class PropertyValueTestBean {
private String defaultLocale;
@Value("#{ systemProperties['user.region'] }")
public void setDefaultLocale(String defaultLocale) {
this.defaultLocale = defaultLocale;
}
public String getDefaultLocale() {
return this.defaultLocale;
}
}
class PropertyValueTestBean {
@Value("#{ systemProperties['user.region'] }")
var defaultLocale: String? = null
}
次の例に示すように、オートワイヤーされたメソッドとコンストラクターも @Value
アノテーションを使用できます。
Java
Kotlin
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;
}
// ...
}
class SimpleMovieLister {
private lateinit var movieFinder: MovieFinder
private lateinit var defaultLocale: String
@Autowired
fun configure(movieFinder: MovieFinder,
@Value("#{ systemProperties['user.region'] }") defaultLocale: String) {
this.movieFinder = movieFinder
this.defaultLocale = defaultLocale
}
// ...
}
Java
Kotlin
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;
}
// ...
}
class MovieRecommender(private val customerPreferenceDao: CustomerPreferenceDao,
@Value("#{systemProperties['user.country']}") private val defaultLocale: String) {
// ...
}