在 Spring 中,${} 语法用于引用配置文件中的属性值,而 #{} 语法用于使用 SpEL(Spring Expression Language)表达式。
Spring EL(Expression Language)是一种强大的表达式语言,用于在 Spring 应用程序中访问对象属性、调用方法、进行运算等。
${}
@Value(“${database.driverName}”)
${}代表占位符,它会读取上下文的属性装配到属性中。
#{}
#{} 语法用于使用 SpEL(Spring Expression Language)表达式,它允许进行更复杂的计算、条件判断等操作。
引用Spring环境中的其他Bean的属性:
@Component
public class MyComponent {@Value("#{myBean.someProperty}")private String somePropertyValue;// Getter and setter
}
这里 somePropertyValue 的值将被注入为 myBean Bean 中的 someProperty 属性的值。
通过这样的配置,Spring 将会在初始化MyComponent 类时,自动注入myBean 类的 someProperty 属性值到 Person 类的 name 属性中。
执行数学运算:
@Component
public class MathComponent {@Value("#{3 + 4}")private int sum;// Getter and setter
}
这里 sum 的值将被注入为 3 加 4 的结果,即 7。
使用条件表达式:
@Component
public class ConditionComponent {@Value("#{1 > 0 ? 'true' : 'false'}")private String conditionResult;// Getter and setter
}
这里 conditionResult 的值将被注入为 ‘true’,因为条件 1 > 0 为真。
引用系统属性:
@Component
public class SystemComponent {@Value("#{systemProperties['java.home']}")private String javaHome;// Getter and setter
}
这里 javaHome 的值将被注入为 Java 系统属性 java.home 的值。
总的来说,#{} 表达式可以使 @Value 注解更加灵活,可以执行各种动态的计算、条件判断以及引用Spring环境中的其他属性等操作。