Spring bean初始化后如何运行作业?

时间:2016-07-25 10:50:38

标签: spring spring-mvc autowired

我正在开发Spring 4 mvc和hibernate 我想在服务器启动时运行代码,该代码将使用数据库中的get数据,然后执行一些业务逻辑

我可以在哪里放置代码我试图将代码放入

    org.springframework.web.servlet.support.AbstractDispatcherServletInitializer.onStartup(ServletContext)

但我无法使用@Autowired变量

          public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

        @Autowired
        TaskDAO task;
        @Override
        protected Class<?>[] getRootConfigClasses() {
            return new Class[] { SpringRootConfig.class };
        }

        @Override
        protected Class<?>[] getServletConfigClasses() {
            return new Class[] { SpringWebConfig.class };
        }

        @Override
        protected String[] getServletMappings() {
            return new String[] { "/" };
        }

        @Override
        public void onStartup(ServletContext servletContext) throws ServletException {
            task.getAllTasks()
            // TODO Auto-generated method stub
            super.onStartup(servletContext);
        }

    }

1 个答案:

答案 0 :(得分:2)

您无法自动装配变量,因为您的课程不受春季管理。因此,请使用@Component注释对您的班级进行注释。

然后,您可以定义一个将执行逻辑的方法(例如 onStartup 方法),并使用@PostConstruct注释对其进行注释,如本答案中所述。

How to call a method after bean initialization is complete?

它将在bean初始化后执行该方法。

这可能是你的班级:

    @Component
    public class WebInitializer{
      @Autowire
      TaskDAO task;

      @PostConstruct
      private void onStartup(){
          task.getAllTasks();
          // Do whatever you want
    }
}