java - 从具有包和名称的实例中获取依赖实例

标签 java spring

假设我有实例 A,其中我与实例 B 和 C 有依赖关系。B 和 C 也与 B1 和 C1 有依赖关系

可以使用反射和包字符串作为“B.B1”和“C.C1”从 A 获取这些实例。

应该是这样的

          B1 b1 = A.getMagicallyTheInstance("B.B1");
          C1 c1 = A.getMagicallyTheInstance("C.C1");

最佳答案

您可以使用 java 反射或 OGNL 来实现. OGNL 适用于对象图符号语言及其您想要使用的符号。但是如果你想使用反射,你必须遵循这些步骤。

  1. 获取 A 的字段
  2. 从 A 的字段中提取 B 并将其作为对象获取。
  3. 获取B的字段
  4. 从 B 的字段中提取 B1 并将其作为对象获取。
  5. 对 C 和 C1 重复 2-4。

顺便说一句,getResourceAsStream 用于读取类路径资源作为 inputStream。据我所知,它有反射(reflection)。

但在 OGNL 中它要简单得多。

  1. 使用现有对象构建上下文。就像 A
  2. 的一个实例
  3. 使用此上下文执行图形表​​示法。对于获取 B1,您可以使用类似“a.b.b1”的内容

就是这样。

更新

我刚刚意识到你的 Spring 标签。您可以使用 Spring EL 轻松实现它。这是一个例子:

    ExpressionParser parser = new SpelExpressionParser();
    Expression exp = parser.parseExpression("b.b1");
    // I Assume A has a field name b, and B has a field name b1
    B1 b1 = (B1) exp.getValue(aInsantece);

关于java - 从具有包和名称的实例中获取依赖实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31287675/

相关文章:

java - 如何在 Hibernate Where 子句中使用 CASE WHEN

java - 错误意外字符 javax.json

java - 如何让用户在javafx中逐个窗口退出

java - 使用可迭代到 Hashmap 的迭代器实现 - 可能吗?

java - 没有 block 处理的Spring Batch步骤

java - 如何从 Spring messageSource 手动重新加载属性文件

java - Rest url 中查询参数的日期时间格式

spring - 我们可以为 filterChainProxy 中的单个过滤器链提供多种模式吗

java - 回滚事务功能是否仅在抛出异常时才起作用?

java - Spring Cloud任务taskLifecycleListener在数据流服务器中运行时出错