package org.ngrinder.infra.plugin.extension; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; import ro.fortsoft.pf4j.Plugin; import ro.fortsoft.pf4j.PluginManager; import ro.fortsoft.pf4j.PluginWrapper; import ro.fortsoft.pf4j.spring.SpringExtensionFactory; import ro.fortsoft.pf4j.spring.SpringPlugin; /** * SpringExtensionFactory extended class. * The springframework ApplicationContext injection. * * @author Gisoo Gwon ,GeunWoo Son * @see https://github.com/decebals/pf4j-spring * @since 3.0 */ @Component public class NGrinderSpringExtensionFactory extends SpringExtensionFactory { private final PluginManager pluginManager; @Autowired private ApplicationContext applicationContext; @Autowired public NGrinderSpringExtensionFactory(PluginManager pluginManager) { super(pluginManager); this.pluginManager = pluginManager; } protected void setApplicationContext(ApplicationContext applicationContext) { this.applicationContext = applicationContext; } @Override public Object create(Class<?> extensionClass) { Object extension = createWithoutSpring(extensionClass); if (extension != null) { PluginWrapper pluginWrapper = pluginManager.whichPlugin(extensionClass); if (pluginWrapper != null) { applicationContext.getAutowireCapableBeanFactory().autowireBean(extension); } } return extension; } }