2016-05-03 63 views
0

我正在将EJB和ManagedBean注入到Spring-Handler中。我的目标是将这两个豆注入AuthenticationSuccessHandler将EJB和CDI注入到Spring-Handler中

public class LoginAuthenticationSuccessHandler implements AuthenticationSuccessHandler { 
} 

该处理程序在Spring成功登录时调用,似乎不处理注入注释。这两种豆,其应注射,主要有以下几种结构:

@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; 
} 

可能有人点我以正确的方式?

+0

你是如何创建'LoginAuthenticationSuccessHandler'。 –

+0

通过XML:'' –

+0

有'或<'。没有其中的注释几乎没用。 –

回答

1

通常情况下,您不能将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(); 
} 
+0

这就是工作的方式,谢谢! –