我正在尝试用 Spring 注释替换我的 CDI/EJB 注释。但我正在努力如何正确地做到这一点。
这就是我在 CDI/EJB 中的内容:
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
class Service {
@Inject
EntityManager em;
}
@Named
@RequestScoped
class Facade {
@Inject
Service service;
}
现在我会执行以下操作:
@Stateless
@Transactional
@Repository
class Service {
@Inject
EntityManager em;
}
无国籍人怎么办? Spring 的对应词是什么? 显然我不能只删除这个注释,然后我会得到这些异常:
javax.el.PropertyNotFoundException: /input.xhtml @15,30 registerButtonAction="#{facade.createNew()}": The class 'Facade$Proxy$_$$_WeldClientProxy' does not have the property ...
进一步:
@Named
@Service
class Facade {
@Autowired
Service service;
}
我是否必须简单地用 @Autowired
替换所有 @Inject
注释?
Spring 中是否有一些东西可以处理 EL 命名,以便我可以删除 @Named
?
我也必须注释我的 JPA 实体吗?
最佳答案
Stateless
和 Stateful
Bean 是 EJB
概念,但 Spring
通过 Service Bean 提供类似的服务。将 @Service
注释放入您的业务逻辑类中,如果您希望您的 bean 为“无状态”或“有状态”,只需配置您的 bean 范围(例如 Request
或 session
)。
Spring
还有一个内置的事务管理API,因此您的事务注释可能需要更改。
最后,Spring
与许多持久性框架兼容,包括 JPA
。如果您想保留 JPA 也可以,如果您愿意,可以随意将其更改为其他技术(可能是 Hibernate 或 MyBatis)
关于java - 将 CDI/EJB 注解迁移到 Spring 注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9556532/