簡體   English   中英

將EJB和CDI注入Spring-Handler

[英]Inject EJB and CDI into Spring-Handler

我目前正在努力將EJB和ManagedBean注入Spring-Handler。 我的目標是將這兩個bean注入到AuthenticationSuccessHandler

public class LoginAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
}

Spring在成功登錄后會調用此處理程序,並且似乎不處理注入注釋。 應該注入的兩個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注入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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM