前面所有的答案都是使用Spring
DI的直接方法。但是,也可以使用ServiceLocatorFactoryBean来创建工厂,而不必在工厂中指定任何bean。首先为您的工厂定义一个接口:
public interface MyFactory { Strategy get(String type);}// Could be an abstract classpublic interface Strategy { void doStuff();}然后在您的应用程序中:
@Configurationpublic class AppConfiguration { @Autowired private BeanFactory beanFactory; public ServiceLocatorFactoryBean myFactoryLocator() { final ServiceLocatorFactoryBean locator = new ServiceLocatorFactoryBean(); locator.setServiceLocatorInterface(MyFactory.class); locator.setBeanFactory(beanFactory); return locator; } @Bean public MyFactory myFactory() { final ServiceLocatorFactoryBean locator = myFactoryLocator(); locator.afterPropertiesSet(); return (MyFactory) locator.getObject(); }}现在,您可以定义实现/扩展的bean(使用注释@ Service,@ Component或@Bean),它们将自动注册到MyFactory
bean中,并可以使用以下方法创建:
myFactory.get("beanName");最好的部分是您可以将Strategy Bean注册为惰性的并具有不同的作用域。



