[英]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.