【问题标题】:Spring inject bean into startup class during server start up在服务器启动期间 Spring 将 bean 注入到启动类中
【发布时间】:2012-07-03 02:39:29
【问题描述】:

我的豆子是:

@Component
public class KidsServerStartUp implements ServletContextListener
{
     UploadService uplService;

    @Autowired
    public void setUplService( UploadService uplService )
    {
        this.uplService = uplService;
    }
    public void contextInitialized(ServletContextEvent event) {
       System.out.println ( uplService );
    }
}

在 web.xml 中;我首先调用spring框架来设置所有bean;然后设置启动监听器:

<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <listener>
        <listener-class>com.kids.util.KidsServerStartUp</listener-class>
    </listener>

uplService 被打印为 null !

【问题讨论】:

  • 您是说OptimizeImages 被注入到UploadService 但您的代码建议UploadService 被注入到OptimizeImages,哪一个是正确的?任务调度代码写在哪里?
  • 阿伦,我在上面做了一些重构,这样问题就更明显了。感谢您的调查。

标签: spring timertask


【解决方案1】:

我认为您要查找的内容类似于 this post

由于您使用的是ServletContextListener,因此弹簧上下文不会用于创建Listener 类。但是我们可以使用ServletContext 访问ApplicationContext

public class KidsServerStartUp implements ServletContextListener {
    public void contextInitialized(ServletContextEvent event) {
        final WebApplicationContext springContext = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());
        UploadService uplService = springContext.getBean(UploadService.class);
        System.out.println ( uplService );
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 2011-03-03
    • 2012-10-14
    • 1970-01-01
    • 2018-01-04
    相关资源
    最近更新 更多