Factory调用及代理模式实现的延迟加载功能
下面来看调用是多么简单,providerFactories就是我们图示的HashMap,下面的implementationProvider是那个延迟加载的类LazyImplementationProviderFactor的对象:
ImplementationProviderFactory
providerFactory = (ImplementationProviderFactory)
providerFactories.getProviderFactory(implementation.getClass());
ImplementationProvider
implementationProvider = providerFactory.createImplementationProvider
(component, implementation);
LazyImplementationProviderFactor调用createImplementationProvider方法如下,其中getFactory()是要加载该延迟加载类封装的实际的的ProviderFactor。
public ImplementationProvider createImplementationProvider(RuntimeComponent component,
Implementation Implementation) {
return getFactory().createImplementationProvider(component, Implementation);
}
另外除了延迟加载的原理,还存在代理模式的应用,如下图所示,这儿调用的是LazyImplementationProvicerFactory,然后通过它来调用实际的ImplementationProvicerFactory的实现类来创建ImplementationProvider。
且看它这时才加载( ImplementationProviderFactory getFactory() ),这正是延迟加载的含义。
try {
ClassLoader classLoader = ImplementationProviderFactory.class.getClassLoader();
Class<ImplementationProviderFactory> factoryClass =
(Class<ImplementationProviderFactory>)Class.forName(className, true, classLoader);
Constructor<ImplementationProviderFactory> constructor =
factoryClass.getConstructor(ExtensionPointRegistry.class);
factory = constructor.newInstance(registry);
} catch (Exception e) {
throw new IllegalStateException(e);
}
}
return factory;