Spring应用程序的正确入口是什么?

时间:2019-06-18 17:18:45

标签: java xml spring spring-boot ant

我正在使用Ant通过XML文件启动Spring应用程序。 XML文件会创建一些bean,并启用组件扫描。

一旦初始化Spring容器并创建了所有Spring Bean,我显然显然需要实际运行应用程序要运行的代码。我尝试将代码添加到其中一个bean的@PostConstruct方法中,但这会引起奇怪的问题,因为@PostConstruct在整个Spring应用程序完成实例化之前被调用。

在Spring容器完成启动后,Spring应用程序中的main()方法等效于实际运行要运行的内容的等效方法是什么?

1 个答案:

答案 0 :(得分:0)

在类路径中的application-context.xml中压缩所有要加载的xml

例如:application-context.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>

使用application-context.xml在自定义MyBeanLoader中加载所有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
}

}

希望能解决您的问题