java - 将 CDI/EJB 注解迁移到 Spring 注解

标签 java spring jakarta-ee ejb cdi

我正在尝试用 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 实体吗?

最佳答案

StatelessStateful 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/

相关文章:

java - JSF:通过 AJAX 调用更新 View 后立即调用 javaScript 方法

java - 给定一个数字数组,不除法返回所有其他数字的乘积数组?

java - java中如何从链表中删除数据

java - 永久性 JMS 连接失败,但没有错误或 InactivityExceptions

java - 无法在 Rational application Developer 8 中启动 websphere server 8

java - 如何在 Spring Boot 应用程序启动时避免或忽略 schema.sql 的 SQLExceptions

unit-testing - Spring 的属性占位符不适用于 jUnit 测试

java - 类似于 Java 的 OpenCart

java - 在hibernate中使用事务类型为Bean而不是Container对于超时问题有什么影响?

java - 企业应用程序的瘦(更)独立客户端