Весна, как выполнить метод - PullRequest
2 голосов
/ 08 февраля 2012

Я знаю, что этот вопрос является дубликатом Выполните метод при запуске весной . однако я попробовал совет, размещенный в принятом ответе на этот вопрос, и ничего не помогло мне Таким образом, я подозреваю, что, хотя здесь задается тот же самый вопрос , я твердо чувствую, что основная причина отличается и поэтому требует другого ответа / решения.

Я пытаюсь заставить Spring создать бин при запуске и немедленно выполнить один из его методов.

Мой весенний конфиг (heartbeat-config.xml):

<beans (all the xmlns stuff here ommitted for brevity)>
    <bean id="heartbeat" class="org.me.heartbeat.Heartbeat"/>
</beans>

И Heartbeat.java:

public class Heartbeat
{
    @PostConstruct
    public void start()
    {
        System.out.println("I should see this message in the logs somewhere!!");
    }
}

И, наконец, мой web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

    <!-- The display name of this web application -->
    <display-name>Heartbeat</display-name>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/heartbeat-config.xml</param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
</web-app>

Когда я запускаю это в Tomcat, я не получаю никаких ошибок при запуске. Tomcat работает нормально (как я могу судить по журналам). Однако я не вижу никаких выходных данных в журналах, которые должны генерироваться вызовом System.out в моем методе start() (Tomcat перенаправляет весь стандартный вывод в свои файлы журналов).

Я что-то пропускаю здесь? Есть ли очевидный диагноз, который я мог бы поставить?

1 Ответ

3 голосов
/ 08 февраля 2012

Самый простой способ сделать это - забыть об аннотациях и изменить определение bean-компонента на:

<bean id="heartbeat" class="org.me.heartbeat.Heartbeat" init-method="start"/>

Если вы хотите аннотации, вам нужно объявить пространство имен контекста и поместить его в ваше applicationContext.xml.:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-2.5.xsd">

    <!-- Enable @PostConstruct, @PreDestroy and friends in Spring -->
    <context:annotation-config/>

    <bean id="heartbeat" class="org.me.heartbeat.Heartbeat"/>
</beans>

Примечание: проверьте пространства имен, они скопированы из сети.

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