由于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);
}
答案 0 :(得分:1)
Spring的主要特性是依赖注入。
依赖或耦合,一个对象的状态 使用另一个对象的功能
很明显,User
实体在您的情况下不是依赖关系,因此使用new
运算符创建它是最正确的方法。
另外,您说过每次引用服务时都希望创建“依赖关系”。这是“如何在单例中更新原型bean”问题,您可以在访谈中遇到这个问题。这不在你的问题范围内,但我强烈建议你去谷歌。