在 applicationContext 上执行 SPeL

executing SPeL on the applicationContext

我正在尝试使用 SPeL 从应用程序上下文中提取一些数据

@Value

准确地说,我想要这个代码作为一个值

@Autowired
private ApplicationContext context;

Map<String, CrudRepository> repos = 
context.getBeansOfType(CrudRepository.class);

@Value("#{...})
private Map<String, CrudRepository> repos;

是否有像 "systemProperties" 这样的魔法变量可以调用?必须有!

像这样:

@Value("#{beanFactory.getBeansOfType(T(org.springframework.data.repository.CrudRepository))}")
private Map<String, MessageChannel> repos;

这里的 SpEL 基于 BeanExpressionContext,所以它的 getBeanFactory() 对我们有用!

从另一方面看,Map<String, CrudRepository> 不需要 @Value。正常的 @Autowired 以同样的方式工作。