Bean 引用

如果评估上下文已配置了 bean 解析器,你可以通过在表达式中使用 @ 符号作为前缀来查找 bean。以下示例展示了如何实现这一点:spring-doc.cadn.net.cn

ExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext context = new StandardEvaluationContext();
context.setBeanResolver(new MyBeanResolver());

// This will end up calling resolve(context, "someBean") on MyBeanResolver
// during evaluation.
Object bean = parser.parseExpression("@someBean").getValue(context);
val parser = SpelExpressionParser()
val context = StandardEvaluationContext()
context.setBeanResolver(MyBeanResolver())

// This will end up calling resolve(context, "someBean") on MyBeanResolver
// during evaluation.
val bean = parser.parseExpression("@someBean").getValue(context)

如果 bean 名称包含点号(.)或其他特殊字符,则必须将该 bean 的名称以字符串字面量的形式提供——例如,@'order.service'spring-doc.cadn.net.cn

若要访问工厂 Bean 本身,应在 Bean 名称前加上 & 符号。以下示例展示了如何实现这一点:spring-doc.cadn.net.cn

ExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext context = new StandardEvaluationContext();
context.setBeanResolver(new MyBeanResolver());

// This will end up calling resolve(context, "&someFactoryBean") on
// MyBeanResolver during evaluation.
Object factoryBean = parser.parseExpression("&someFactoryBean").getValue(context);
val parser = SpelExpressionParser()
val context = StandardEvaluationContext()
context.setBeanResolver(MyBeanResolver())

// This will end up calling resolve(context, "&someFactoryBean") on
// MyBeanResolver during evaluation.
val factoryBean = parser.parseExpression("&someFactoryBean").getValue(context)