Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring中自动关联业务对象_Java_Spring_Design Patterns_Spring Mvc - Fatal编程技术网

Java 如何在Spring中自动关联业务对象

Java 如何在Spring中自动关联业务对象,java,spring,design-patterns,spring-mvc,Java,Spring,Design Patterns,Spring Mvc,我遵循控制器->服务->DAO模式。当我调用DAO实现时,我得到一个DTO/数据对象。然后将其传递到服务层,将其各自的业务对象和数据对象结合在一起。像这样: public User getUserById(int id) { return new User(userDAO.getUserById(id)); } class User { private UserDTO userDTO; public User(UserDTO userDTO) { th

我遵循控制器->服务->DAO模式。当我调用DAO实现时,我得到一个DTO/数据对象。然后将其传递到服务层,将其各自的业务对象和数据对象结合在一起。像这样:

public User getUserById(int id) {
    return new User(userDAO.getUserById(id));
}

class User {
    private UserDTO userDTO;

    public User(UserDTO userDTO) {
        this.userDTO = userDTO;
    }
}
我想做的是将所有业务逻辑包装在业务类中,但我需要额外的依赖项。 例如,我希望能够做到以下几点:

//... some code

User user = userService.getByUserId(1);

user.delete(); // this should delete the user from the database
为了让我以这种方式删除用户,我需要将UserService自动连接到业务类中,但这不会起作用,因为我正在用户服务中手动实例化用户类

class User {
    @Autowired
    private UserService userService; // this won't work since I call instantiate User myself, ie. new User()
    private UserDTO userDTO;

    public User(UserDTO userDTO) {
        this.userDTO = userDTO;
    }

    public boolean delete() {
        userService.deleteByUserId(userDTO.getId());
    }
}

是否有一种模式可以让我做我想做的事情?

我认为将business class作为DTO对象的成员不是一个好的设计。
更合适的方法是在业务类中使用delete方法。这将有助于松耦合。

我认为您可以使用
@可配置的
注释来实现这一点,尽管Spring实际上不是这样工作的。这将给应用程序增加大量开销,并使调试更加困难


删除在业务类中。那么为什么要从用户对象调用它呢?只要在需要它的地方调用userService.deleteUser(user),因为代码变得更加复杂,我需要在多个地方复制该功能。我想在任何地方重复使用相同的删除逻辑。我不能将所有的delete逻辑都放在服务类中,因为这样它就不会太可重用了。在什么情况下,复制代码会比调用userService.delete(user)更有用!!