如何从Controller访问applicationContext

时间:2012-01-08 18:31:57

标签: spring-mvc

我正在使用Netbeans的Spring MVC项目,我已将applicationContext.xml文件移动到/ src / conf,因为我读过WEB-INF不是正确的文件夹。我无法从/ src / java / web / controller中的控制器访问应用程序上下文。我尝试了几种方法,但没有部署项目。

我想要一个链接,以了解有关网络项目中的路径的更多信息,请求。

我认为这可以帮助我们弄清楚:

public class TasksController implements Controller {
private TaskManager taskManager;
protected final Log logger = LogFactory.getLog(getClass());

public TaskController() {
    ApplicationContext context = new FileSystemXmlApplicationContext("/WEB-INF/applicationContext.xml");    
    taskManager = (TaskManager)context.getBean("taskManager");
}

@Override
public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res) 
    throws ServletException, IOException {

    logger.info("Returning view from TaskController");

    Map<String,Object> tasks = new HashMap<String,Object>();

// Get tasks from model

    return new ModelAndView("tasks","tasks",tasks);
}

再见!

1 个答案:

答案 0 :(得分:13)

哎哟。好的,您不要在控制器中实例化新的上下文。 Spring已经配置了上下文,你只需要问Spring吧。

让你的控制器实现BeanFactoryAware,然后Spring将通过自动调用setBeanFactory为你注入上下文:

public class TasksController implements Controller, BeanFactoryAware {
  private TaskManager taskManager;

  public void setBeanFactory(BeanFactory context) {
     taskManager = (TaskManager)context.getBean("taskManager");
  }

  // handleRequest as before
}