将EJB注入Spring Boot环境

时间:2018-05-30 14:18:22

标签: spring spring-boot java-ee ejb

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

到目前为止一直很好,但我已被要求添加纯Java EE中实现的功能。 我立刻想到将一些普通的旧Java Bean以某种方式“插入”当前的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提供一些函数”和那些注释属于春天。

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

1 个答案:

答案 0 :(得分:0)

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

不幸的是,不支持@Stateless。

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

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

然后你就可以@Autowire / @注入bean了。