如何在Spring中自动装入业务对象
问题描述:
我遵循Controller - > Service - > DAO模式。当我调用DAO实现时,我得到一个DTO/Data对象。然后将其传递给服务层,将它的各个业务对象和它的数据对象结合在一起。像这样:如何在Spring中自动装入业务对象
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到商务舱但这不会因为我手动实例化用户服务中的User类。
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());
}
}
有没有一种模式可以让我做我想做的事?
答
我不认为将业务类作为DTO对象的成员是一个好设计。 更合适的方法是在业务类中使用您的删除方法。这将有助于松耦合。
答
我认为你可以用@Configurable
注解来做到这一点,尽管这实际上并不是Spring应该如何工作。它会给应用程序增加很多开销并使调试更加困难。
删除是在业务类中。 – user1218776 2013-03-16 23:33:11
那你为什么要从用户对象中调用它?只需在需要的地方调用userService.deleteUser(user) – 2013-03-16 23:35:20
随着代码变得越来越复杂,我需要将功能复制到多个地方。我想重复使用相同的删除逻辑。我不能将所有的删除逻辑放在服务类中,因为那样它就不会太可重用。 – user1218776 2013-03-16 23:39:36