Дханджи в своей книге об инъекциях зависимостей поощряет использование пространств имен при именовании весенних бобов.
Цитата из книги:
Я также настоятельно рекомендую использоватьпространств имен, например, «set.BinaryTree» и «set.HashTable», которые лучше читать и понимать, чем «binaryTreeSet» и «hashTableSet».Пространства имен являются более элегантной и естественной номенклатурой для вашего ключевого пространства и в высшей степени удобнее для чтения, чем строки сгруппированных заглавных слов.
Теперь это звучит разумно.Но с SPeL конфликты возникают.Когда-то Оззи играл в Black Sabbath, поэтому для каждого участника группы я буду использовать bs namespance в имени бина, например:
<bean id="bs.ozzy"
class="sk.spring.idol.annotation.Instrumentalist"
p:song="Sabbath Bloody Sabbath" />
Теперь у меня есть другой участник black sabbath, которыйбудет иметь введенное значение для имени песни, используя SpEL.Любая песня, которую играет Оззи, также сыграет моего нового участника (скажем, Тони):
public class Instrumentalist implements Performer {
@Value("#{bs.ozzy.song}")
private String song;
// blabla other stuff, getters setters and so on
}
Теперь я получу ...
Expression parsing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): Field or property 'bs' cannot be found on object
Что теперь ?Есть ли способ избежать текста как «это имя бина и не оценивать его как свойство»?
Примечания:
- Пример кода вдохновлен книгой Дханджи.
- Признаюсь - я не прочитал всю документацию по SpEL, возможно, решение намного проще