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);
}
}
在下面的 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);
}
}