将 EJB 注入 Spring 引导环境

Injecting EJB into a Spring Boot environment

我目前正在开发一个 Spring Boot 项目,该项目由一个全栈 Web 应用程序组成,使用 Spring JPA 进行持久化,为业务级别提供服务,Spring REST 端点的 MVC。

到目前为止一切顺利,但我需要添加在纯 Java EE 中实现的功能。 我立即想到 "inserting" 几个普通的旧企业 Java Beans 以某种方式进入当前 Spring 引导应用程序。

到目前为止,我已经尝试了不同的可能性,但都没有奏效。 EJb 类似于

    @Stateless(name = "TeacherService")
    public class TeacherServiceImpl implements TeacherService {
        ....
    }

我想像这样将它注入 Spring RestController:

    @RestController
    public class ExampleController {

       @EJB / @Inject / @Autowire
       private TeacherService teacherService;   

       @GetMapping(value = "user")   
       public String getSomeData() {
         return teacherService.someMethod();
       }
    }

我尝试了几种组合,但到目前为止都没有效果。 我找到了一些信息,但看起来将 EJB 与 Spring 合并的唯一方法是使用完整的 Spring 框架而不是 Spring Boot。 在有人指出这一点之前,我知道这是一项愚蠢的任务,我可以简单地将 class 声明为带有 @Service 或 @Component 之类的 Spring Bean,但分配状态为 "provide some functions using plain Java EE" 并且那些注释属于 Spring.

是否有解决此类任务的方法(或我未尝试过的方法)? 或者,Java EE 的哪个组件可以轻松地与 Spring Boot 兼容? 谢谢你的时间。

Spring 支持 JSR-330(@Inject 和 @Named)。

很遗憾,@Stateless 不受支持。

但是 Spring 可以解决您的问题的方法是在配置中将 TeacherServiceImpl 声明为一个 bean class。

@Configuration
public class MyConfig {
    @Bean
    public TeacherService teacherService() {
      return new TeacherServiceImpl();
    }
}

然后您将能够@Autowire/@Inject bean。