首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring和ServletContextListener

Spring和ServletContextListener
EN

Stack Overflow用户
提问于 2016-06-26 01:02:48
回答 1查看 1.6K关注 0票数 1

我在这里读了一些文章和帖子,关于

代码语言:javascript
复制
@Autowired
ServletContext context;

我从ServletContextListener@Controller的实现。但是当我运行它时,我得到了一个很长的异常:

代码语言:javascript
复制
org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'trendsoftCtrl':
Unsatisfied dependency expressed through field 'context':
No qualifying bean of type [javax.servlet.ServletContext] found for dependency [javax.servlet.ServletContext]:
expected at least 1 bean which qualifies as autowire candidate for this dependency.
Dependency annotations:
{@org.springframework.beans.factory.annotation.Autowired(required=true)};
nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type [javax.servlet.ServletContext] found for dependency [javax.servlet.ServletContext]:
expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations:
{@org.springframework.beans.factory.annotation.Autowired(required=true)}

这是我的课程。

代码语言:javascript
复制
@WebListener
public class TRSCListner implements ServletContextListener {

@Override
public void contextInitialized(ServletContextEvent event) {
    ServletContext context = event.getServletContext();
    String beanFileName = context.getInitParameter("springBeans");

    GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
    ctx.load(beanFileName);
    ctx.refresh();
    NewsDao newsDao = ctx.getBean("newsDao", NewsDao.class);

    context.setAttribute("appContext", ctx);
    context.setAttribute("dao", newsDao);
}

@Override
public void contextDestroyed(ServletContextEvent event) {
    ServletContext context = event.getServletContext();
    GenericXmlApplicationContext ctx = (GenericXmlApplicationContext) context.getAttribute("appContext");
    ctx.close();
}

}

还有另一个

代码语言:javascript
复制
@Controller
public class TrendsoftCtrl {

@Autowired
ServletContext context; 

@RequestMapping ("/welcome")
public ModelAndView helloWorld() {
    NewsDao newsDao = (NewsDao) context.getAttribute("dao");
    List<News> news = newsDao.getAll();

    StringBuilder message = new StringBuilder();

    for (News n : news) {
        message.append(n.getCategory().getName() + "<br>");
        message.append(n.getName() + "<br>");
        message.append(n.getData() + "<br><br>");
    }

    return new ModelAndView("welcome", "news", message.toString());
}

public ServletContext getContext() {
    return context;
}

public void setContext(ServletContext context) {
    this.context = context;
}

}
EN

回答 1

Stack Overflow用户

发布于 2016-06-27 19:37:17

默认情况下,@Autowired将执行依赖项检查,以确保属性已正确连接。当Spring找不到匹配的bean进行连接时,它将抛出异常。要修复此问题,您可以通过将@Autowired的“required”属性设置为false来禁用此检查功能。

@自动连线(required=false)

即使Spring找不到匹配的bean,它也不会设置person属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38030859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档