1.XComponent
XComponent可以理解为某个类的附属定向服务,关联性更强
如下3个接口
- ApplicationComponent对应ApplicationModel
- ServiceComponent对应ServiceMetadata
- FrameworkComponent对应FrameworkModel
public interface XComponent {
String name();
}
public interface ApplicationComponent extends XComponent {
void init(ApplicationModel var1);
}
public interface ServiceComponent extends XComponent {
void init(ServiceMetadata var1);
}
public interface FrameworkComponent extends XComponent {
void init();
}
2. ContainerBase
ContainerBase提供了XComponent的基本操作,所以例如ApplicationModel添加XComponent的操作也继承自ContainerBase
public abstract class ContainerBase {
protected ContainerBase parent;
protected Map<String, XComponent> componentMap = new LinkedHashMap();
public ContainerBase(ContainerBase parent) {
this.parent = parent;
}
public XComponent getComponent(String name) {
XComponent component = null;
if (StringUtils.isNotBlank(name)) {
component = (XComponent)this.componentMap.get(name);
if (component == null && this.parent != null) {
component = this.parent.getComponent(name);
}
}
return component;
}
public abstract void init();
}
看以下三个例子,基本大同小异
2.1 ApplicationModel
public class ApplicationModel extends ContainerBase {
public ApplicationModel(String name, ClassLoader appContextClassLoader, boolean isBiz) {
super(frameworkModel);
List<ApplicationComponent> applicationComponents = this.serviceContainer.getInstances(ApplicationComponent.class);
Iterator i$ = applicationComponents.iterator();
while(i$.hasNext()) {
ApplicationComponent component = (ApplicationComponent)i$.next();
this.componentMap.put(component.name(), component);
}
}
2.2 FrameworkModel
public class FrameworkModel extends ContainerBase {
public FrameworkModel() {
super((ContainerBase)null);
this.init();
}
public void init() {
List<FrameworkComponent> components = HSFServiceContainer.SHARED_CONTAINER.getInstances(FrameworkComponent.class);
Iterator i$ = components.iterator();
while(i$.hasNext()) {
FrameworkComponent component = (FrameworkComponent)i$.next();
component.init();
this.componentMap.put(component.name(), component);
}
}
}
2.3 ServiceMetadata
public class ServiceMetadata extends ContainerBase {
public synchronized void init() {
List<ServiceComponent> components = this.applicationModel.getServiceContainer().
getInstances(ServiceComponent.class, this.isProvider ? new String[]{"provider"} : new String[]{"consumer"});
Iterator i$ = components.iterator();
while(i$.hasNext()) {
ServiceComponent component = (ServiceComponent)i$.next();
component.init(this);
this.componentMap.put(component.name(), component);
}
}
}
网友评论