gpt4 book ai didi

java - Spring应用程序初始化

转载 作者:行者123 更新时间:2023-12-01 08:57:34 25 4
gpt4 key购买 nike

我正在尝试在应用程序启动期间初始化一些bean,这些bean将从静态共享内存结构中读取。我以前使用过 @PostContruct,但想转向更多基于事件的初始化,以便我可以利用 Spring AOP 功能(配置、资源等)并避免重复。

所有数据bean都实现这个接口(interface):

public interface DataInterface {
public void loadData();

public List<String> getResults(String input);
}

我尝试实现 ServletContextListenerWebApplicationInitializer 接口(interface),但似乎都没有被调用。

@Service
public class AppInit implements WebApplicationInitializer {
@Autowired
DataInterface[] dataInterfaces;

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
// This does not get called
for (DataInterface interface : dataInterfaces)
interface.loadData();
}
}


@WebListener
public class AppContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
// does not get called
}

@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
// does not get called
}
}

我还可以尝试在启动 SpringApplication 后返回的 main() 函数末尾初始化这些类。

@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
// Can I initialize the DataInterfaces here???
}
}

看来应该有更好的方法。

编辑:

我最终使用了以下解决方案,因为我无法接收 Spring docs 中列出的任何 Context* 事件。 .

@Component
public class DalInitializer implements ApplicationListener {
@Autowired
DataInterface[] dataInterfaces;

@Override
public void onApplicationEvent(ApplicationEvent applicationEvent) {
if (applicationEvent.getClass() == ApplicationReadyEvent.class) {
for (DataInterface interface : dataInterfaces)
interface.loadData();
}
}
}

最佳答案

使用 Spring 应用程序事件监听器,请参阅 Better application events in Spring Framework

关于java - Spring应用程序初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41946852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com