在 Spring 中,#{}和${} 都是用于属性占位符的语法,但它们的用途略有不同。
-
${}:用于取出配置文件中的属性值,通常用于配置文件中的变量,例如:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean>在这个例子中,{jdbc.driverClassName} 表示获取配置文件中的 jdbc.driverClassName 属性的值。
-
#{}:用于表达式计算,通常用于动态计算属性值,例如:
<bean id="myBean" class="com.example.MyBean"> <property name="name" value="#{systemProperties['myapp.name']}"/> </bean>在这个例子中,#{} 用于计算表达式 systemProperties['myapp.name'] 的值,并将其注入到 MyBean 对象的 name 属性中。
需要注意的是,{} 和 #{} 的区别在于 {} 只是一个占位符,它的值只能是字符串类型;而 #{} 可以包含任意的 SpEL 表达式,它可以动态计算属性值并注入到对象中。因此,如果需要动态计算属性值,则需要使用 #{} 表达式。