private Class lookupClassForType(String className) { ClassLoader componentLoader = plasticFactory.getClassLoader(); try { return PlasticInternalUtils.toClass(componentLoader, className); } catch (ClassNotFoundException ex) { throw new RuntimeException(ex); } } }
@Override @SuppressWarnings("unchecked") public <T> ServiceBindingOptions bind(Class<T> serviceClass) { if (serviceClass.isInterface()) { try { String expectedImplName = serviceClass.getName() + "Impl"; ClassLoader classLoader = proxyFactory.getClassLoader(); Class<T> implementationClass = (Class<T>) classLoader.loadClass(expectedImplName); if (!implementationClass.isInterface() && serviceClass.isAssignableFrom(implementationClass)) { return bind( serviceClass, implementationClass); } throw new RuntimeException(IOCMessages.noServiceMatchesType(serviceClass)); } catch (ClassNotFoundException ex) { throw new RuntimeException(String.format("Could not find default implementation class %sImpl. Please provide this class, or bind the service interface to a specific implementation class.", serviceClass.getName())); } } return bind(serviceClass, serviceClass); }
@Override @SuppressWarnings("unchecked") public <T> ServiceBindingOptions bind(Class<T> serviceClass) { if (serviceClass.isInterface()) { try { String expectedImplName = serviceClass.getName() + "Impl"; ClassLoader classLoader = proxyFactory.getClassLoader(); Class<T> implementationClass = (Class<T>) classLoader.loadClass(expectedImplName); if (!implementationClass.isInterface() && serviceClass.isAssignableFrom(implementationClass)) { return bind( serviceClass, implementationClass); } throw new RuntimeException(IOCMessages.noServiceMatchesType(serviceClass)); } catch (ClassNotFoundException ex) { throw new RuntimeException(String.format("Could not find default implementation class %sImpl. Please provide this class, or bind the service interface to a specific implementation class.", serviceClass.getName())); } } return bind(serviceClass, serviceClass); }
public ComponentInstantiatorSourceImpl(Logger logger, LoggerSource loggerSource, @Builtin PlasticProxyFactory proxyFactory, @Primary ComponentClassTransformWorker2 transformerChain, ClasspathURLConverter classpathURLConverter, OperationTracker tracker, Map<String, ControlledPackageType> configuration, @Symbol(SymbolConstants.PRODUCTION_MODE) boolean productionMode, ComponentClassResolver resolver, InternalComponentInvalidationEventHub invalidationHub) { this.parent = proxyFactory.getClassLoader(); this.transformerChain = transformerChain; this.logger = logger; this.loggerSource = loggerSource; this.changeTracker = new URLChangeTracker(classpathURLConverter); this.tracker = tracker; this.invalidationHub = invalidationHub; this.productionMode = productionMode; this.resolver = resolver; // For now, we just need the keys of the configuration. When there are more types of controlled // packages, we'll need to do more. controlledPackageNames.addAll(configuration.keySet()); initializeService(); }
private Object createReloadableProxy(ServiceBuilderResources resources) { ReloadableServiceImplementationObjectCreator reloadableCreator = new ReloadableServiceImplementationObjectCreator(proxyFactory, resources, proxyFactory.getClassLoader(), serviceImplementationClass.getName()); resources.getService(UpdateListenerHub.class).addUpdateListener(reloadableCreator); if (eagerLoad) { reloadableCreator.createObject(); } return proxyFactory.createProxy(serviceInterfaceClass, resources.getServiceImplementation(), reloadableCreator, getDescription()); } }
private Object createReloadableProxy(ServiceBuilderResources resources) { ReloadableServiceImplementationObjectCreator reloadableCreator = new ReloadableServiceImplementationObjectCreator(proxyFactory, resources, proxyFactory.getClassLoader(), serviceImplementationClass.getName()); resources.getService(UpdateListenerHub.class).addUpdateListener(reloadableCreator); if (eagerLoad) { reloadableCreator.createObject(); } return proxyFactory.createProxy(serviceInterfaceClass, resources.getServiceImplementation(), reloadableCreator, getDescription()); } }