没有定义名为'errorNotifier'的bean

时间:2011-10-16 15:45:36

标签: spring spring-roo

我正在尝试在春天设置一个bean工厂,这应该是非常简单的事情,但我无法弄清楚它为什么不起作用。今天大部分时间都在看例子,在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日志中出现任何错误,只有这个输出:

  

线程“main”中的异常   org.springframework.beans.factory.NoSuchBeanDefinitionException:没有   名为'errorNotifier'的bean定义于   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,我会得到No bean名为'mailSender'。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

applicationContext文件可能不在类路径上;我不确定all_URL_prefix是否会超越文件系统和jar的根级别,使测试变得不稳定。尝试移动配置文件,或更改从中获取配置文件的位置列表。