Spring:在服务中注入数据对象

时间:2018-03-10 01:52:09

标签: java spring spring-mvc jpa entity

由于JPA和Spring具有不同的上下文管理,因此不建议使用注释@Component和@Entity创建数据对象类。

但是没有@Component数据对象不能被@Autowired注入服务。

但是用new创建我的数据对象的新实例对我来说似乎是回归。

是否有一种在Spring托管服务中注入数据对象(@Entity)的好方法?

数据对象:

@Component
@Entity
@Table(name = "user")
public class UserDo {
//data object stuff ...

服务:

@Service("listAllGoods")
@Transactional(propagation = Propagation.REQUIRED)
public class ListAllGoods implements IListGoodService{

@Autowired
private IGoodDao goodDao;

@Autowired
private UserDo user;

//option 1 : works but not recommended because forces @Component on data object
@Override
public List<GoodDo> createGood() {
    user.setName("Roger");
    return goodDao.create(user);
}

//option 2 : 
// without @Autowired UserDo
// regression feeling
@Override
public List<GoodDO> createGood() {
    UserDo user = new UserDo();
    user.setName("Roger");
    return goodDao.create(user);
}

1 个答案:

答案 0 :(得分:1)

Spring的主要特性是依赖注入。

  

依赖或耦合,一个对象的状态   使用另一个对象的功能

很明显,User实体在您的情况下不是依赖关系,因此使用new运算符创建它是最正确的方法。

另外,您说过每次引用服务时都希望创建“依赖关系”。这是“如何在单例中更新原型bean”问题,您可以在访谈中遇到这个问题。这不在你的问题范围内,但我强烈建议你去谷歌。