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 - 将外部库集成到 OSGI 中

java - 从 POJO 读取上下文参数

java - Seam 实体中的其他方法

java - Katharsis 结合 Spring Boot

java - 单个线程是否保证执行 Servlet 及其过滤器?

java - 使用单一数据结构的双向映射

Java "ajp-9009-AsyncTimeout"java.lang.OutOfMemoryError : Java heap space Errors 错误

java - DataInputStream.read() 与 DataInputStream.readFully()

java - Pivotal Cloud Foundry - 安全证书

java - 应用服务器和 Spring 上下文加载