我想知道如何使用 Spring 3 注释实现简单的工厂模式。我在文档中看到您可以创建调用工厂类并运行工厂方法的 bean。我想知道这是否可能仅使用注释。
我有一个当前调用的控制器
MyService myService = myServiceFactory.getMyService(test);
result = myService.checkStatus();
MyService 是一个接口,其中一个方法称为 checkStatus()。
我的工厂类如下所示:
@Component
public class MyServiceFactory {
public static MyService getMyService(String service) {
MyService myService;
service = service.toLowerCase();
if (service.equals("one")) {
myService = new MyServiceOne();
} else if (service.equals("two")) {
myService = new MyServiceTwo();
} else if (service.equals("three")) {
myService = new MyServiceThree();
} else {
myService = new MyServiceDefault();
}
return myService;
}
}
MyServiceOne 类如下所示:
@Autowired
private LocationService locationService;
public boolean checkStatus() {
//do stuff
}
当我运行此代码时,locationService 变量始终为空。我相信这是因为我自己在工厂内创建对象并且没有进行自动装配。有没有办法添加注释以使其正常工作?
谢谢
原文由 blong824 发布,翻译遵循 CC BY-SA 4.0 许可协议
你是对的,通过手动创建对象,你不会让 Spring 执行自动装配。考虑通过 Spring 管理您的服务:
但我认为整体设计相当糟糕。 Wouldn’t it better to have one general
MyService
implementation and passone
/two
/three
string as extra parameter tocheckStatus()
?你想达到什么目标?这 仍然 设计得很糟糕,因为添加新的
MyService
实现还需要MyServiceAdapter
修改(违反 SRP)。但这实际上是一个很好的起点(提示:地图和策略模式)。