Cdi 应用程序范围的托管bean未初始化
我有一个应用程序范围的托管bean,我正试图将它注入到会话过滤器中,以根据应用程序范围bean提供的映射过滤规则 应用程序范围bean的目的是将应用程序配置从数据库加载到映射中,该映射可以在应用程序范围内访问Cdi 应用程序范围的托管bean未初始化,cdi,servlet-filters,Cdi,Servlet Filters,我有一个应用程序范围的托管bean,我正试图将它注入到会话过滤器中,以根据应用程序范围bean提供的映射过滤规则 应用程序范围bean的目的是将应用程序配置从数据库加载到映射中,该映射可以在应用程序范围内访问 @Named @ApplicationScoped public class ApplicationConfig implements Serializable { private Map<String,String> accessRule; privat
@Named
@ApplicationScoped
public class ApplicationConfig implements Serializable {
private Map<String,String> accessRule;
private static final long serialVersionUID = -7984677603595580195L;
@PostConstruct
public void init() throws SQLException, Exception {
System.out.println("ApplicationContainer INIT");
accessRule.put("A", "A");
}
public Map<String,String> getAccessRule() {
return accessRule;
}
public void setAccessRule(Map<String,String> accessRule) {
this.accessRule = accessRule;
}
}
@Named
@适用范围
公共类应用程序配置实现可序列化{
私有映射访问规则;
私有静态最终长serialVersionUID=-7984677603595580195L;
@施工后
public void init()引发SQLException,异常{
System.out.println(“ApplicationContainer INIT”);
accessRule.put(“A”、“A”);
}
公共映射getAccessRule(){
返回访问规则;
}
public void setAccessRule(映射访问规则){
this.accessRule=accessRule;
}
}
我尝试过@PostConstruct,也尝试过使用构造函数,但是没有调用bean。这就是注入命名bean的方式
@WebFilter(urlPatterns = { "/*" })
public class ApplicationFilter implements Filter {
private static final String FACES_RESOURCES = "javax.faces.resource";
private static final Logger log = Logger.getLogger(ApplicationFilter.class.getName());
private boolean disableFilter;
private String errorPage;
private String indexPage;
@Inject
public ApplicationConfig applicationConfig;
private List<String> ignoredResources = new ArrayList<>();
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
System.out.println(applicationConfig.getAccessRule());
arg2.doFilter(arg0, arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
@WebFilter(urlPatterns={”/*“})
公共类ApplicationFilter实现过滤器{
私有静态最终字符串FACES\u RESOURCES=“javax.FACES.resource”;
私有静态最终记录器log=Logger.getLogger(ApplicationFilter.class.getName());
私有布尔禁用过滤器;
私有字符串错误页;
私有字符串索引扩展;
@注入
公共应用程序配置应用程序配置;
private List ignoredResources=new ArrayList();
@凌驾
公共空间销毁(){
//TODO自动生成的方法存根
}
@凌驾
public void doFilter(ServletRequest arg0、ServletResponse arg1、FilterChain arg2)引发IOException、ServletException{
System.out.println(applicationConfig.getAccessRule());
arg2.doFilter(arg0,arg1);
}
@凌驾
public void init(FilterConfig arg0)抛出ServletException{
}
}
我使用了@Named/@Inject,但仍然不起作用。我想使用一个应用程序范围的bean,它从DB获取详细信息,并在WebFilter中使用它。请帮助@balusc按照您在另一篇文章中提出的建议,更新我的代码ApplicationConfig=(ApplicationConfig)arg0.getServletContext().getAttribute(“ApplicationConfig”);System.out.println(config.getAccessRule());我得到了空指针again@BalusC完成,但仍然获取空值注入私有应用程序配置@巴卢斯克。我使用了命名/注入,但仍然不起作用。我想使用一个应用程序范围的bean,它从DB获取详细信息,并在WebFilter中使用它。好心的help@BalusC我正在使用tomcat作为服务器检查这个@balusc根据您在另一篇文章中提出的建议,我更新了代码ApplicationConfig=(ApplicationConfig)arg0.getServletContext().getAttribute(“ApplicationConfig”);System.out.println(config.getAccessRule());我得到了空指针again@BalusC完成,但仍然获取空值注入私有应用程序配置@巴卢斯克。我使用了命名/注入,但仍然不起作用。我想使用一个应用程序范围的bean,它从DB获取详细信息,并在WebFilter中使用它。好心的help@BalusC我正在使用tomcat作为服务器检查这个?