Java - 覆盖在构造函数中创建的对象?

Java - Override an object created in Constructor?

在下面的 Spring 服务中,我在 MyService 的构造函数中创建 ClassToCreate

 @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();

        }


    }

我在 myMethod 中尝试创建和使用 ClassToCreate 的不同实例而不是使用构造函数中的实例的最佳方法是什么?

我想在这里使用来自构造函数的路径创建 class 的不同实例,但附加 object.id 作为 ClassToCreate 的路径。我还需要使用与传递给 MyService 构造函数相同的 repository 值。

你可以使用组合。 您可以使用组件(Spring 中的@Component)。 创建 returns 个 ClassToCreate 对象的工厂方法。

@Component

public class 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);
}

}