Java 如何在 SystemInitializer class 中使用 Spring Autowired
Java How use Spring Autowired in SystemInitializer class
我有一个 Java 项目 Spring MVC
。
我需要在我的应用程序初始化后启动 TimerTasks,所以我实现了 WebApplicationInitializer
接口并将其命名为 SystemInitializer
。在那个class里面我有一个@Autowired
属性,那个@Autowired
属性是一个DAO
class。
我需要它因为我想根据我数据库中的记录执行一些任务。但是 Autowired 属性 永远是空的。
public class SystemInitializer implements WebApplicationInitializer {
@Autowired
private DomainResearchDao domainResearchDao;
@Override
public void run() {
if (this.domainResearchDao != null) {
System.out.println("OK");
}
// always here
else{
System.out.println("NO OK");
}
}
您不能在 WebApplicationInitializer
中使用 @Autowired
。
您的 Bean 尚未准备好(尚未扫描)以供注入。您的应用程序当时不知道 DomainResearchDao
是什么。
Spring 只能在您的应用程序初始化并创建所有(单例)实例(@Component
、@Service
等)后自动装配 bean。
如果您想在应用程序启动后做一些工作,请使用 Spring 事件来执行此操作:
@Component
public class DoOnStart{
@Autowired
private IYourService service;
@EventListener
public void handleContextRefresh(ContextRefreshedEvent e) {
// your CODE
}
}
只需实现此 class,无需自动装配。
我有一个 Java 项目 Spring MVC
。
我需要在我的应用程序初始化后启动 TimerTasks,所以我实现了 WebApplicationInitializer
接口并将其命名为 SystemInitializer
。在那个class里面我有一个@Autowired
属性,那个@Autowired
属性是一个DAO
class。
我需要它因为我想根据我数据库中的记录执行一些任务。但是 Autowired 属性 永远是空的。
public class SystemInitializer implements WebApplicationInitializer {
@Autowired
private DomainResearchDao domainResearchDao;
@Override
public void run() {
if (this.domainResearchDao != null) {
System.out.println("OK");
}
// always here
else{
System.out.println("NO OK");
}
}
您不能在 WebApplicationInitializer
中使用 @Autowired
。
您的 Bean 尚未准备好(尚未扫描)以供注入。您的应用程序当时不知道 DomainResearchDao
是什么。
Spring 只能在您的应用程序初始化并创建所有(单例)实例(@Component
、@Service
等)后自动装配 bean。
如果您想在应用程序启动后做一些工作,请使用 Spring 事件来执行此操作:
@Component
public class DoOnStart{
@Autowired
private IYourService service;
@EventListener
public void handleContextRefresh(ContextRefreshedEvent e) {
// your CODE
}
}
只需实现此 class,无需自动装配。