Nano Hash - криптовалюты, майнинг, программирование

Ни один компонент с именем errorNotifier не определен

Я пытаюсь настроить бобовую фабрику весной, что должно быть очень просто сделать, но я просто не могу понять, почему она не работает. Проведите большую часть сегодняшнего дня, рассматривая примеры, читая другие подобные сообщения на stackOverflow, читая Spring In Action, а также Spring Recipes, но пока безуспешно. Вторая пара глаз, вероятно, заметит мою ошибку в мгновение ока.

Интерфейс уведомления об ошибках

public interface ErrorNotifier {
    public void notifyCopyError(String srcDir, String destDir, String filename);        
}

Реализация уведомления об ошибках

public class EmailErrorNotifier implements ErrorNotifier {

    private MailSender mailSender;

    /**
     * Blank constructor
     */
    public EmailErrorNotifier() {
    }

    public void setMailSender(MailSender mailSender) {
        this.mailSender = mailSender;
    }

    @Override
    public void notifyCopyError(String srcDir, String destDir, String filename) {

        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom("system@localhost");
        message.setTo("admin@localhost");
        message.setSubject("Finished Uploading File");
        message.setText("Your upload failed!");

        mailSender.send(message);

    }
}

Моя конфигурация в applicationContext.xml

    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="${email.host}"/>
        <property name="protocol" value="${email.protocol}"/>
        <property name="port" value="${email.port}"/>
        <property name="username" value="${email.username}"/>
        <property name="password" value="${email.password}"/>
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">true</prop>
                <prop key="mail.smtp.starttls.enable">true</prop>
            </props>
        </property>
    </bean>

    <bean id="errorNotifier" name="errorNotifier"  class="com.bdw.controller.EmailErrorNotifier">           
        <property name="mailSender" ref="mailSender"/>
    </bean>

И класс, в котором я его тестирую

public class test {

    public static void main(String[] args) {

        ApplicationContext context =
                new ClassPathXmlApplicationContext(
                ApplicationContext.CLASSPATH_ALL_URL_PREFIX
                + "applicationContext.xml");

        ErrorNotifier notifier =
                context.getBean("errorNotifier", ErrorNotifier.class);
        notifier.notifyCopyError("test", "test", "test");

    }
}

Я не получаю никаких ошибок в журналах tomcat или glassfish, только этот вывод:

Исключение в потоке «основной» org.springframework.beans.factory.NoSuchBeanDefinitionException: ни один компонент с именем errorNotifier не определен в org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:527) в org.springframework. beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1083) в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:274) в org.springframework.beans.factory.support.AbstractBeanFactory. getBean(AbstractBeanFactory.java:194) в org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1079) в test.main(test.java:21)

Если я изменю параметр context.getBean на поиск mailSender, я не получу bean-компонент с именем «mailSender».

Любые идеи?

16.10.2011

  • Я бы начал со следующего: запустить уровни журнала Spring и убедиться, что при запуске ничего не сломалось, и убедиться, что applicationContext действительно находится в пути к классам при выполнении. 16.10.2011
  • applicationContext в настоящее время находится в /src/main/resources/META-INF/spring/applicationContext.xml 16.10.2011
  • Хм, если вы поместите его в /src/main/resources (при условии, что проект Maven), это сработает? 16.10.2011
  • Это исправляет!! Забавно, что Spring ROO помещает настройки почты в META-INF, если она там не работает :-| Как заставить его работать в месте по умолчанию? 16.10.2011
  • Мне интересно, это тот префикс пути к классам, который возится с ним? Точно сказать не могу :/ 16.10.2011
  • Вы имеете в виду в web.xml: ‹context-param› ‹param-name›contextConfigLocation‹/param-name› ‹param-value›classpath*:META-INF/spring/applicationContext*.xml‹/param-value› ‹/ context-param› Собираюсь сделать симлинк и двигаться дальше. Опубликуйте свой исходный ответ в качестве ответа, тогда я смогу принять ваше решение. 16.10.2011
  • Когда applicationContext находится непосредственно в ресурсах (симлинк), он работает без префикса ApplicationContext.CLASSPATH_ALL_URL_PREFIX. 16.10.2011
  • Перешел к ответу. Я думаю, что простое добавление вашего местоположения в тестовый код сработает и позволит избежать ошибок :) 16.10.2011

Ответы:


1

Файл applicationContext, скорее всего, не находится в пути к классу; Я не уверен, что all_URL_prefix будет копаться дальше корневого уровня файловой системы и jar-файлов, что сделает тест нестабильным. Попробуйте переместить файл конфигурации или изменить список местоположений, из которых можно получить файл конфигурации.

16.10.2011
  • Ты великолепен, Дейв, рад, что могу учиться у экспертов здесь, в stackoverflow. ClassPathXmlApplicationContext(META-INF/spring/applicationContext.xml) делает свое дело. Пробовал это решение ранее, но предположил, что корневой каталог был META-INF, поэтому, очевидно, это не сработало. 16.10.2011
  • Не блестяще, просто захлопнул те же типы ошибок;) 16.10.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..