我想在工厂方法中实例化一个类,并执行接口中定义的方法的相应实现。 我的问题是我不想自己创建这样一个类的依赖项(它们是嵌套的),而是让 Spring 将它们注入到这个类中。
我的代码是:
public Interface BasicProcess {
Message createProcess()
}
@RequiredArgsConstructor
public Class WorkProcess implements BasicProcess {
private final HelperService;
@Override
Message createProcess(){
//do some logik
}
}
@RequiredArgsConstructor
public Class EatProcess implements BasicProcess {
private FoodService;
@Override
Message createProcess(){
//do some other logik
}
}
现在我决定,我要实例化哪个“Bean”:
@Service
@RequiredArgsConstructor
public class Factory(){
private final HelperService helperService;
private final FoodService foodService;
public BasicProcess factoryMethod(String param){
if(param=="Work"){
return new WorkProcess(helperService)
} else if (param == "Food") {
return new EatProcess(foodService)
}
}
}
现在我正在调用特定的实现:
@RequiredArgsConstructor
@Component
class SomeClass{
private final Factory factory;
public void startProcess(){
BasicProcess processfactory.factoryMethod("Food");
processfactory.createProcess(); //calling EatProcess implementation
}
}
是否有一些更好的解决方案来动态调用“createProcess”? 我不喜欢说“new WorkProcess(....)”
您可以将必要的依赖项注入到
SomeClass
的构造函数中,然后使用这些依赖项来创建 BasicProcess
实现的实例。
工作代码:
public interface BasicProcess {
Message createProcess();
}
@RequiredArgsConstructor
public class WorkProcess implements BasicProcess {
private final HelperService helperService;
@Override
public Message createProcess() {
// other codes
return new Message("WorkProcess executed");
}
}
@RequiredArgsConstructor
public class EatProcess implements BasicProcess {
private final FoodService foodService;
@Override
public Message createProcess() {
// other logic
return new Message("EatProcess executed");
}
}
@Service
@RequiredArgsConstructor
public class Factory {
private final HelperService helperService;
private final FoodService foodService;
public BasicProcess factoryMethod(String param) {
if ("Work".equals(param)) {
return new WorkProcess(helperService);
} else if ("Food".equals(param)) {
return new EatProcess(foodService);
}
return null;
}
}
@Component
@RequiredArgsConstructor
public class SomeClass {
private final Factory factory;
public void startProcess() {
BasicProcess process = factory.factoryMethod("Food");
if (process != null) {
process.createProcess(); // calling EatProcess implementation
} else {
// Handle invalid param
}
}
}
在这里,您的依赖项
HelperService
和 FoodService
被注入到 WorkProcess
和 EatProcess
的构造函数中。 Factory 类中的工厂方法负责根据参数创建 BasicProcess 实现的实例。然后,SomeClass 组件使用工厂获取实例并调用 createProcess 方法。