【发布时间】:2019-05-22 05:41:51
【问题描述】:
我有一个工厂对象,它实现了以下内容:
public interface MyFactory {
<T> T getInstance(Class<T> clazz);
}
可以这样使用:
MyService s = factory.getInstance(MyService.class);
它可以基于clazz产生多种实例。如果它得到一个工厂对象不支持的clazz,则返回null。
现在我正在编写一个 Spring 应用程序(Spring Boot 2.0.1)并希望将其注入机制与工厂对象一起使用。例如,我想做这样的事情:
@Controller
public class MyController {
@Autowired
private MyService s;
}
有没有办法像这样将 MyFactory 对象集成到 Spring 中?我知道我可以手动为每个类创建绑定,但我正在寻找一种更简单的方法。
【问题讨论】:
-
既然你有工厂,为什么不从工厂本身获取实例呢?如果你想使用依赖注入,你可以通过编程方式将 bean 注册到 spring 的应用程序上下文中。
-
因为它将是样板文件。如果我能像问题中那样写会更干净
-
实例是如何创建的?如果实例不是 bean,则依赖注入将不起作用。如果你想要更精细的控制,你可以使用
@Qualifier和@Autowired来注入一个基于名称而不是类型的特定bean -
它们不是 bean,它们与 Spring 无关,这就是为什么我要问如何。顺便说一句,根据您所说的,我正在考虑将方法
Set<Class<?>> getSupportedClasses()添加到MyFactory并执行以下操作: baeldung.com/spring-5-functional-beans 。谢谢
标签: java spring spring-boot abstract-factory