假设我有实例 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 适用于对象图符号语言及其您想要使用的符号。但是如果你想使用反射,你必须遵循这些步骤。
- 获取 A 的字段
- 从 A 的字段中提取 B 并将其作为对象获取。
- 获取B的字段
- 从 B 的字段中提取 B1 并将其作为对象获取。
- 对 C 和 C1 重复 2-4。
顺便说一句,getResourceAsStream
用于读取类路径资源作为 inputStream。据我所知,它有反射(reflection)。
但在 OGNL 中它要简单得多。
- 使用现有对象构建上下文。就像
A
的一个实例
- 使用此上下文执行图形表示法。对于获取 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/