我正在使用 Ant 通过 XML 文件启动 Spring 应用程序。XML 文件创建几个 bean 并启用组件扫描。
初始化 Spring 容器并创建所有 Spring bean 后,我显然需要实际运行应用程序要运行的代码。我尝试将代码添加到其中一个 bean 上的 @PostConstruct
方法中,但这会导致奇怪的问题,因为在整个 Spring 应用程序完成实例化之前@PostConstruct
在 Spring 容器完成启动后实际运行您想要运行的内容的 Spring 应用程序中的main()
方法相当于什么?
要在应用程序上下文中加载的所有 xml 合并.xml位于类路径中
例如:应用程序上下文.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<import resource="classpath:DataSourceContext.xml"/>
<import resource="classpath:HibernateContext.xml"/>
<import resource="classpath:PropertyContext.xml"/>
</beans>
使用应用程序上下文在自定义 MyBeanLoader 中加载所有 xml.xml
public class MyBeanLoader {
public static void main(String args[]){
ApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml");
}
}
现在将其作为 ant 中的入门主类文件.xml
<target name="jar">
<mkdir dir="build/jar"/>
<jar destfile="build/jar/HelloWorld.jar" basedir="build/classes">
<manifest>
<attribute name="Main-Class" value="com.MyBeanLoader"/>
</manifest>
</jar>
</target>
如果你想在 Spring 的上下文启动后运行逻辑,你可以使用 ApplicationListener 和事件 ContextRefreshedEvent。
@Component
public class StartupApplication implements
ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
// call you logic implementation
}
}
希望能解决您的问题