复杂工厂的介绍
如图所示,ArtifactProcessorExtensionPoint接口表明这是是个插件板,它有两个子插件板,分别为URLArtifactProcessorExtensionPoint 和StAXArtifactExtensionPoint,另外还有两个缺省实现类DefaultURLArtifactProcessorExtensionPoint 和 DefaultStAXArtifactExtensionPoint,从上面工厂类模式的扩展类似(为了简化,没有画文件包及处理文件的类ServiceConfigUtil),在META-INF/services/下面有两个文件:
org.apache.tuscany.sca.contribution.processor.URLArtifactProcessorExtensionPoint
org.apache.tuscany.sca.contribution.processor.DefaultURLArtifactProcessorExtensionPoint
org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint
org.apache.tuscany.sca.contribution.processor.DefaultStAXArtifactProcessorExtensionPoint
分别标明是两个子插件板的实现插件板。它们都继承了DefaultArtifactProcessorExtensionPoint,也就是说提供类型(ArtifactProcessor)相似的插孔。更具体地说是继承类型(ArtifactProcessor的两个子类型URLArtifactProcessor和StAXArtifactProcessor),这儿可以很清楚地看出JDK1.5后的泛型的应用是多么大的威力。
同样在在META-INF/services/下面有两个相对应的文件,分别表示两种类似的插件:
org.apache.tuscany.sca.interfacedef.wsdl.xml.WSDLDocumentProcessor;
type=.wsdl,model=org.apache.tuscany.sca.interfacedef.wsdl.WSDLDefinition
org.apache.tuscany.sca.interfacedef.wsdl.xml.XSDDocumentProcessor;
type=.xsd,model=org.apache.tuscany.sca.interfacedef.wsdl.XSDefinition
org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor
org.apache.tuscany.sca.implementation.spring.SpringArtifactProcessor;
qname=http://tuscany.apache.org/xmlns/sca/1.0#implementation.spring,
model=org.apache.tuscany.sca.implementation.spring.SpringImplementation
org.apache.tuscany.sca.assembly.xml.DefaultBeanModelProcessor;
qname=http://tuscany.apache.org/xmlns/sca/1.0#binding.http,
model=org.apache.tuscany.sca.binding.http.HTTPResourceBinding,
factory=org.apache.tuscany.sca.binding.http.HTTPResourceBindingFactory
org.apache.tuscany.sca.interfacedef.wsdl.xml.WSDLInterfaceProcessor;
qname=http://www.osoa.org/xmlns/sca/1.0#interface.wsdl,
model=org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterfaceContract
org.apache.tuscany.sca.databinding.sdo.ImportSDOProcessor;
qname=http://tuscany.apache.org/xmlns/sca/databinding/sdo/1.0#import.sdo,
model=org.apache.tuscany.sca.databinding.sdo.ImportSDO
org.apache.tuscany.sca.contribution.java.impl.JavaImportProcessor;
qname=http://www.osoa.org/xmlns/sca/1.0#import.java,
model=org.apache.tuscany.sca.contribution.java.JavaImport
org.apache.tuscany.sca.contribution.java.impl.JavaExportProcessor;
qname=http://www.osoa.org/xmlns/sca/1.0#export.java,
model=org.apache.tuscany.sca.contribution.java.JavaExport
org.apache.tuscany.sca.contribution.namespace.impl.NamespaceImportProcessor;
qname=http://www.osoa.org/xmlns/sca/1.0#import,
model=org.apache.tuscany.sca.contribution.namespace.NamespaceImport
org.apache.tuscany.sca.contribution.namespace.impl.NamespaceExportProcessor;
qname=http://www.osoa.org/xmlns/sca/1.0#export,
model=org.apache.tuscany.sca.contribution.namespace.NamespaceExport
org.apache.tuscany.sca.implementation.java.xml.JavaImplementationProcessor;
qname=http://www.osoa.org/xmlns/sca/1.0#implementation.java,
model=org.apache.tuscany.sca.implementation.java.JavaImplementation
org.apache.tuscany.sca.binding.sca.xml.SCABindingProcessor;
qname=http://www.osoa.org/xmlns/sca/1.0#binding.sca,
model=org.apache.tuscany.sca.binding.sca.impl.SCABindingImpl
org.apache.tuscany.sca.implementation.resource.impl.ResourceImplementationProcessor;
qname=http://tuscany.apache.org/xmlns/sca/1.0#implementation.resource,
model=org.apache.tuscany.sca.implementation.resource.ResourceImplementation,
factory=org.apache.tuscany.sca.implementation.resource.ResourceImplementationFactory
org.apache.tuscany.sca.implementation.osgi.xml.OSGiImplementationProcessor;
qname=http://tuscany.apache.org/xmlns/sca/1.0#implementation.osgi,
model=org.apache.tuscany.sca.implementation.osgi.OSGiImplementationInterface
org.apache.tuscany.sca.assembly.xml.DefaultBeanModelProcessor;
qname=http://tuscany.apache.org/xmlns/sca/1.0#binding.atom,
model=org.apache.tuscany.sca.binding.feed.AtomBinding,
factory=org.apache.tuscany.sca.binding.feed.AtomBindingFactory
org.apache.tuscany.sca.assembly.xml.DefaultBeanModelProcessor;
qname=http://tuscany.apache.org/xmlns/sca/1.0#binding.rss,
model=org.apache.tuscany.sca.binding.feed.RSSBinding,
factory=org.apache.tuscany.sca.binding.feed.RSSBindingFactory
org.apache.tuscany.sca.binding.ws.xml.WebServiceBindingProcessor;
qname=http://www.osoa.org/xmlns/sca/1.0#binding.ws,
model=org.apache.tuscany.sca.binding.ws.WebServiceBinding
类似上面所说明的,在Hash Map中依然是保存着ArtifactProcessor的延迟加载封装类,同样是采用代理模式来实现延迟加载功能的,在这儿不再赘述。