在“动态私有DataType”的示例中我们已经介绍了如何咋View中根据数据字典动态的创建或改变DataType,但是由于这样的操作在每一个页面初始化的过程中都会执行一次,所以效率并不会太好。
本例演示了如何通过Java代码动态的创建全局DataType。
本例的做法是在Dorado启动之后,自动的根据数据字典的内容创建一系列全局的DataType。这些动态创建的DataType既可以继承自XML定义的DataType,也可以被XML中的定义的DataType继承。通过这种方式可以使数据字典与DataType的结合变的更加自然。
下面说明基本实现过程。
首先定义一个继承自com.bstek.dorado.core.EngineStartupListener的一个Java类,并配置到Spring运行环境中。
基本结构为:
public class DynaGlobalDataTypeStartupListener extends EngineStartupListener { @Override public void onStartup() throws Exception { } }
注意要覆盖实现其中的onStartup方法,该方法会在Dorado启动之后,自动调用。我们只要在该方法的内部利用全局DataType的创建规则创建DataType就可以。
在Dorado中提供了一个全局DataType的管理工具类:com.bstek.dorado.data.config.definition.DataTypeDefinitionManager,并在Spring中被注册的BeanId为"dataTypeDefinitionManager",你可以在DynaGlobalDataTypeStartupListener对象中注入这个dataTypeDefinitionManager,之后就可以通过dataTypeDefinitionManager实现全局DataType的管理了。
其中获取全局DataType的方法为:
DataTypeDefinition dataType = dataTypeDefinitionManager.getDefinition("BaseEmployee");
创建DataType的方法为:
DataTypeDefinition dataType = new DataTypeDefinition("BaseEmployee"); dataType.setImplType(Employee.class); dataTypeDefinitionManager.registerDefinition(dataType);
获取或创建好DataType之后,对DataType属性的赋值或对内部PropertyDef的属性设定,以及增加新的PropertyDef的操作就比较简单了,请参考sample-center中动态私有DataType的使用办法。