【问题标题】:Injecting EJB into a Spring Boot environment将 EJB 注入 Spring Boot 环境
【发布时间】:2018-05-30 14:18:22
【问题描述】:

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

到目前为止一切顺利,但我被要求添加在纯 Java EE 中实现的功能。 我立即想到以某种方式将几个普通的旧 Enterprise Java Beans “插入”到当前的 Spring Boot 应用程序中。

到目前为止,我尝试了不同的可能性,但没有任何效果。 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 Framework 而不是 Spring Boot。 在任何人指出这一点之前,我知道这是一项愚蠢的任务,我可以简单地将类声明为带有 @Service 或 @Component 之类的 Spring Bean,但分配状态为“使用纯 Java EE 提供一些功能”和那些注释属于Spring。

对于此类任务,是否有任何解决方法(或我没有尝试过的方法)? 或者,Java EE 的哪个组件可以轻松兼容 Spring Boot? 感谢您的宝贵时间。

【问题讨论】:

标签: spring spring-boot jakarta-ee ejb


【解决方案1】:

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

很遗憾,不支持@Stateless。

但是 Spring 可以解决您的问题的方式,就是将 TeacherServiceImpl 声明为 Configuration 类中的 bean。

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

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

【讨论】:

    猜你喜欢
    • 2020-05-11
    • 1970-01-01
    • 2018-06-26
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2019-03-15
    相关资源
    最近更新 更多