Injeção de Dependência de Primavera e Jar de Plugin

Tenho um aplicativo da Web em execução com um impl padrão de um serviço de back-end. É necessário implementar a interface e soltar o jar na pasta plugins (que não está no caminho de classe dos aplicativos). Depois que o servidor é reiniciado, a idéia é carregar o novo jar no carregador de classes e participar da injeção de dependência. Estou usando o Spring DI usando @Autowired. O novo implemento do serviço de plug-in terá a anotação @Primary. Portanto, considerando dois impls da interface, o primário deve ser carregad

Eu coloquei o jar no classloader e posso chamar o impl manualmente. Mas não consegui participar da injeção de dependência e substituí-la pelo impl padrã

Aqui está um exemplo simplificado:

@Controller
public class MyController {
   @Autowired
   Service service;
}

//default.jar
@Service
DefaultService implements Service {
   public void print() {
       System.out.println("printing DefaultService.print()");
   } 
}

//plugin.jar not in classpath yet
@Service
@Primary
MyNewService implements Service {
   public void print() {
      System.out.println("printing MyNewService.print()");
   } 
}

// Por falta de um local melhor, carreguei o jar do plugin a partir do ContextListener

public class PluginContextLoaderListener extends org.springframework.web.context.ContextLoaderListener {

        @Override
        protected void customizeContext(ServletContext servletContext,
                                        ConfigurableWebApplicationContext wac) {
                System.out.println("Init Plugin");
                PluginManager pluginManager = PluginManagerFactory.createPluginManager("plugins");
                pluginManager.init();

                    //Prints the MyNewService.print() method  
                    Service service = (Service) pluginManager.getService("service");
                    service.print();                  
            }
    }

     <listener>
            <listener-class>com.plugin.PluginContextLoaderListener</listener-class>
     </listener>

Mesmo depois de carregar o jar no carregador de classes, o DefaultService ainda está sendo injetado como serviço. Alguma idéia de como faço para que o jar do plugin participe do ciclo de vida de DI da primavera?

Editado: Simplificando, eu tenho um arquivo de guerra que possui alguns jars de plugins em um diretório de plugins dentro da guerra. Com base no valor de um arquivo de configuração que o aplicativo analisa, quando o aplicativo é iniciado, desejo carregar esse jar de plug-in específico e executar o aplicativo com ele. Dessa forma, eu posso distribuir a guerra para qualquer pessoa e eles podem escolher qual plugin executar com base em um valor de configuração sem ter que reembalar tudo. Este é o problema que estou tentando resolver.

questionAnswers(2)

yourAnswerToTheQuestion