想象一下 UI 传回一个 XMl 节点:
<properties>
<type> Source </type>
<name> Blooper </name>
<delay>
<type> Deterministic </type>
<parameters>
<param> 4 </param>
</parameters>
<delay>
<batch>
<type> Erlang </type>
<parameters>
<param> 4 </param>
<param> 6 </param>
</parameters>
<batch>
在幕后要求您实例化一个类:
new Source("blooper", new Exp(4), new Erlang(4,6);
问题在于您不知道需要处理什么类,您将收到这些类定义的列表以及如何将它们相互链接的说明。
我听说使用 BeanFactoryPostProcessor 或属性编辑器/转换器可能会有帮助。但是,我不知道如何最好地使用它们来解决我的问题。
如果您能提供任何帮助,我们将不胜感激。
最佳答案
我似乎无法在您的问题中提及 spring,因此我将编写一个无 spring 的解决方案。如果您有一些没有提到的 spring-flex 集成,请分享。
Class<?> clazz = Class.forName(type);
return type.newInstance(); // returns a new instance of the specified type
你有两个条件:
type
必须是完全限定的 - 即com.foo.bar.MyType
。如果不是,你必须事先以某种方式转换它- 该类必须具有默认(无参数)构造函数。
然后,如果您希望这些类的依赖项由 spring 上下文 Autowiring ,您可以通过以下方式实现:
WebApplicationContextUtils.getRequiredWebApplicationContext()
.getAutowireCapableBeanFactory().autowire(..);
(或 autowireBean
)。如果您使用带有 Class
参数的那个,您应该在作用域原型(prototype)之前定义 beans。否则,您只需实例化它们并让 spring 注入(inject)它们的依赖关系,而无需预先配置它们。
关于java - SPRING:如何根据从 Flex UI 传递的信息以编程方式实例化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2351317/