java - 将 EJB 和 CDI 注入(inject) Spring-Handler

标签 java spring jakarta-ee ejb cdi

我目前正在努力将 EJB 和 ManagedBean 注入(inject)到 Spring-Handler 中。我的目标是将这两个 bean 注入(inject)到这个 AuthenticationSuccessHandler 中。

public class LoginAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
}

此处理程序由 Sp​​ring 在成功登录后调用,并且似乎不处理注入(inject)注释。应注入(inject)的两个 bean 具有以下结构:

@javax.ejb.Stateless
public class EjbService {
}

@javax.enterprise.context.SessionScoped
@javax.inject.Named("cdiBean")
public class CdiBean implements Serializable {
}

到目前为止,我已经尝试了如下所示的各种注释,但变量仍为 null:

public class LoginAuthenticationSuccessHandler implements AuthenticationSuccessHandler {

    @EJB
    private UserDatabaseService userDatabaseService;

    @Inject
    private UserManagementBean userManagement;
}

有人能给我指出正确的方法吗?

最佳答案

通常,您不能将 CDI 托管 Bean 注入(inject)到 Spring 托管 Bean 中。 您将需要直接访问 Bean Manager。 例如使用 javax.enterprise.inject.spi.CDI 类。

然后你可以做类似的事情:

public static <T> T getInstance(Class<T> type, Annotation... qualifiers) {
    Set<Bean<?>> beans = getBeanManager().getBeans(type, qualifiers);
    Bean<?> bean = getBeanManager().resolve(beans);

    if(bean == null){
        throw new UnsatisfiedResolutionException();
    }

    @SuppressWarnings("unchecked")
    T instance = (T) getBeanManager().getReference(bean, type,
            getBeanManager().createCreationalContext(bean));
    return instance;
}

public static BeanManager getBeanManager() {
    return CDI.current().getBeanManager();
}

关于java - 将 EJB 和 CDI 注入(inject) Spring-Handler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36998593/

相关文章:

Java 并行文件处理

java - 使用 Oath 对 Google 网站中的 contentfeed 执行查询时 token 无效

android - AndroidAnnotations 的 Rest 客户端日志记录

Eclipse,如何合并2个版本

java - 请求调度程序抛出 nullPointerException?

java - jSessionId 真的是独一无二的吗?

JavaFX:如何将文本字段 "style property"绑定(bind)到匹配某些模式的文本属性

java - 按属性字符串对 Set<Object> 进行排序

spring - Spring中的@Configuration和@Component有什么区别?

java - Spring用maven,jar打包,不显示welcome.jsp页面