在以下Spring服务中,我在ClassToCreate
的构造函数中创建MyService
。
@Service("MyService")
public class MyService {
private final Repository repository;
private final ClassToCreate classToCreate;
@Autowired
public MyService(
Repository repository,
@Value("${path}") String path
) {
this.ClassToCreate = new ClassToCreate(repository, path);
}
public void myMethod(Object object){
String appendedPath = path + object.id();
//create different instance of classToCreate with variable appended
ClassToCreate classToCreate = new ClassToCreate(repository, appendedPath);
classToCreate.doSomething();
}
}
当我在
ClassToCreate
中尝试而不是使用构造函数中的内容时,创建和使用myMethod
的不同实例的最佳方法是什么?我想在这里使用构造函数的路径创建类的其他实例,但将object.id附加为
ClassToCreate
的路径。我还需要使用与传递到repository
构造函数中相同的MyService
值。 最佳答案
您可以使用合成。
您可以使用组件(Spring中的@Component)。
创建工厂方法,该方法返回ClassToCreate的对象。
@Component
公共类ClassToCreateFactory {
private Repository repository;
private String path;
@Autowired
public ClassToCreateFactory (Repository repository, @Value("${path}") String path) {
this.repository = repository;
this.path = path;
}
public static ClassToCreate getClassToCreate() {
return new ClassToCreate(repository, path);
}
}