gpt4 book ai didi

java - Spring:在 ID 中使用 namespace 的 bean 与 SPeL 冲突

转载 作者:行者123 更新时间:2023-12-01 15:40:36 25 4
gpt4 key购买 nike

Dhanji 在他的 book about Dependnecy Injection 中鼓励在命名 spring bean 时使用 namespace 。

书中引述:

I also strongly encourage use of namespaces, for example, "set.BinaryTree" and "set.HashTable," which are nicer to read and comprehend than "binaryTreeSet" and "hashTableSet." Namespaces are a more elegant and natural nomenclature for your key space and are eminently more readable than strings of grouped capitalized words.

现在听起来很合理。但截至SPeL ,冲突就产生了。 Ozzy 曾经在 Black Sabbath 中演奏,因此对于每个乐队成员,我都会在 bean 名称中使用 bs 命名空间,如下所示:

<bean id="bs.ozzy"
class="sk.spring.idol.annotation.Instrumentalist"
p:song="Sabbath Bloody Sabbath" />

现在我有黑色安息日的其他成员,他们将使用 SpEL 为歌曲名称注入(inject)值。无论奥兹演奏什么歌曲,我的新成员(比如说托尼)也会演奏:

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

现在怎么办?是否有某种方法可以将文本转义为“这是 bean 名称,并且不将其评估为属性”?

注释:

  • 代码示例的灵感来自 Dhanji 的书。
  • 我承认 - 我还没有阅读 SpEL 的完整文档,也许解决方案要简单得多

最佳答案

你可以这样做:

@Value("#{ #this.getObject('bs.ozzy').song }")

关于java - Spring:在 ID 中使用 namespace 的 bean 与 SPeL 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8105910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com