Какова правильная точка входа для приложения Spring? - PullRequest
0 голосов
/ 18 июня 2019

Я использую Ant для запуска приложения Spring через файл XML. Файл XML создает несколько bean-компонентов и включает сканирование компонентов.

После инициализации контейнера Spring и создания всех bean-компонентов Spring мне, очевидно, нужно запустить код, который должно запускать приложение. Я попытался добавить код в метод @PostConstruct на одном из компонентов, но это вызывает странные проблемы, потому что @PostConstruct вызывается до того, как будет завершено создание всего приложения Spring.

Что эквивалентно методу main() в приложении Spring для фактического запуска материала, который вы хотите запустить после того, как контейнер Spring завершил завершено ?

1 Ответ

0 голосов
/ 18 июня 2019

ударил все xml, которые вы хотите загрузить, в application-context.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>

Загрузить все xmlиспользование в пользовательском MyBeanLoader с использованием application-context.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
}

}

Надеюсь, что это решит вашу проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...