主要通过Objectfactory这个工具类来创建对象,并进行依赖注入
private Container container;
private ActionFactory actionFactory;
private ResultFactory resultFactory;
private InterceptorFactory interceptorFactory;
private ValidatorFactory validatorFactory;
//构建xwork中action实例的快捷方法
public Object buildAction(String actionName, String namespace, ActionConfig config, Map<String, Object> extraContext) throws Exception {
return actionFactory.buildAction(actionName, namespace, config, extraContext);
}
//构建interceptor的快捷方法
public Interceptor buildInterceptor(InterceptorConfig interceptorConfig, Map<String, String> interceptorRefParams) throws ConfigurationException {
return interceptorFactory.buildInterceptor(interceptorConfig, interceptorRefParams);
//构建result的快捷方法
public Result buildResult(ResultConfig resultConfig, Map<String, Object> extraContext) throws Exception {
return resultFactory.buildResult(resultConfig, extraContext);
}
}
//构建validator的快捷方法
public Validator buildValidator(String className, Map<String, Object> params, Map<String, Object> extraContext) throws Exception {
return validatorFactory.buildValidator(className, params, extraContext);
}
工具类可以分为哦两类具有代表性的方法:其一用于构建xwork的内部对象action,interceptor,result,validator.另一类则是用于构建一个普通对象的核心方法buildbean
//根据指定的class和上下文构建bean
public Object buildBean(Class clazz, Map<String, Object> extraContext) throws Exception {
return clazz.newInstance();
}
//针对指定的对象实施依赖注入
protected Object injectInternalBeans(Object obj) {
if (obj != null && container != null) {
container.inject(obj);
}
return obj;
}
//针对指定的类名,上下文构建bean
public Object buildBean(String className, Map<String, Object> extraContext) throws Exception {
return buildBean(className, extraContext, true);
}
//实际操作的构建方法
public Object buildBean(String className, Map<String, Object> extraContext, boolean injectInternal) throws Exception {
Class clazz = getClassInstance(className);
Object obj = buildBean(clazz, extraContext);
if (injectInternal) {
injectInternalBeans(obj);
}
return obj;
}
bulidbean方法中包含了对象创建和依赖注入两个核心过程。