总部给我们提供一个可以扩展ui类的方法,就是我们可以建一个后缀为CTEx或者PIEx的类,继承原来的UI类,扩展就会自动先运行我们的扩展类,从而达到功能扩展的目的,下面对该方法进行一个代码分析:
我们在框架里面是通过UIFactory.create来生成IUIWindow 接口的实现,所以我们直接跟踪到一个具体的UIFactory里面去,
例如:UIModelDialogFactory
我们发现在create方法里面又如下代码:IUIObject uiObject = UIFactoryHelper.initUIObject(name, uiContext, dataObjects, oprt);
这个代码就是初始化ui界面类的,再跟踪下去,就可以发现如下代码:
uiObject = AbstractUIFactory.createUIObjectNoInit(name);
再跟踪下去就发现如下代码,一切玄机就在下面,框架会先加载CTEx为后缀的类,如果找不到就加载PIEx的类,如果再找不到才加载原来的类。。
public static IUIObject createUIObjectNoInit(String name)
throws UIException
{
try
{
Class c = null;
try
{
c = Class.forName(name + "CTEx", false, (com.kingdee.bos.ui.face.AbstractUIFactory.class).getClassLoader());
}
catch(ClassNotFoundException ex)
{
try
{
c = Class.forName(name + "PIEx", false, (com.kingdee.bos.ui.face.AbstractUIFactory.class).getClassLoader());
}
catch(ClassNotFoundException _)
{
c = Class.forName(name);
}
}
IUIObject uiObj = (IUIObject)c.newInstance();
return uiObj;
}
catch(Exception e)
{
throw new UIException("Can not create ui object!", e);
}
}