Spring пропонує шикарні можливості для декларатовного опису параметрів, а вершиною можливостей є Spring Expression Language. По суті, це потужня мова, що надає динаміку до конфігурування бінів, у тому числі можливість працювати графом об”єктів під час виконання. Хто знайомий з OGNL – то це дуже подібно і вшито в спрінг контекст.
Найпростіший приклад: припустимо, ви маєте проперті файл у якому даєте можливість корисутвачу задавати якийсь інтервал часу в годинах (тобто з точки зору користвувача мінімальний крок в налаштуваннях є година), але самі в коді потребуєте секунди, можна інджектати це ось таким чином:
<bean class="com.blogspot.jug-lviv.Test" id="test">
<property name="testField" value="#{${time.interval.hours}*60*60}">
</property></bean>
Наступний приклад, це можливість викликати вашу кастомну функцію, припустимо ви маєте пропертю, до користувач задає якусь відносну директорію, а ви хочете в біні отримати вже абсолютний шлях. Ваший абсолютний шлях = спецефічний для хосту шлях + відносний шлях. Ви пишет клас що реалізую інтерфейс:
interface PathUtil {
String getRealPath(String relativePath);
}
і тепер у вашій спрінг конфігурації ви можете писати, отримуючи одразу абсолютний шлях інджектнутим в бін:
<bean class="com.blogspot.jug-lviv.Test" id="test">
<property name="testField"
value="#{ T(com.blogspot.jug-lviv.PathUtilImpl).getRealPath(${metrics.storage}) }">
</property></bean>
Ну і варіант з інджектанням дефолтного значення, коли воно не доступне серед пропертів:
<bean class="com.blogspot.jug-lviv.Test" id="test">
<property name="topGrade"
value="#{${top.grade} == null ? '100' : ${top.grade} }}">
</property></bean>
Всі зазначені праиклади працюють також для конфігурацій через анотації.
Більше читаємо тут http://static.springsource.org/spring/docs/3.0.0.M3/reference/html/ch07.html