Java SpringBean自动布线错误
我正在尝试在我的应用程序中实现电子邮件功能,但我一直在Java SpringBean自动布线错误,java,spring,autowired,Java,Spring,Autowired,我正在尝试在我的应用程序中实现电子邮件功能,但我一直在 No matching bean of type [org.springframework.mail.javamail.JavaMailSenderImpl] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. 有人能指出我做错了什么吗 bean的xml配置为: <bean
No matching bean of type [org.springframework.mail.javamail.JavaMailSenderImpl] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency.
有人能指出我做错了什么吗
bean的xml配置为:
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<context:annotation-config/>
//...other stuff
<beans:bean id="mailSession" class="org.springframework.jndi.JndiObjectFactoryBean">
<beans:property name="jndiName" value="EmailServer" />
</beans:bean>
<beans:bean id="emailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<beans:property name="session" ref="mailSession"/>
</beans:bean>
您需要将
添加到配置文件中,以便Spring自动连接带注释的bean
从错误消息中,我可以得出结论,自动连线正在工作,但它无法找到所需的bean
确保加载所有bean定义文件。您的JavaMailSenderImpl类本身是否有@Service或类似的注释?这将导致Spring的组件扫描程序将它的一个实例放入Spring容器中,然后它可以自动连接到EmailServiceImpl上。感谢大家的响应。我无法使自动连线正常工作,但我通过执行以下操作使整个电子邮件解决方案正常工作:
<beans:bean id="mailSession" class="org.springframework.jndi.JndiObjectFactoryBean">
<beans:property name="jndiName" value="myMailSession" />
</beans:bean>
<beans:bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<beans:property name="session" ref="mailSession"/>
</beans:bean>
<beans:bean id="emailServiceImpl" class="com.name.here.business.EmailServiceImpl">
<beans:property name="mailSender" ref="mailSender"/>
</beans:bean>
我就是这样修复的: 我也遇到了这个问题,我试图通过手动加载app-context.xml文件,在测试过程中完美地遵循简单的在线教程,但当我尝试运行我的spring mvc应用程序时,它始终显示以下错误:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.springframework.mail.javamail.JavaMailSender] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:952)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:821)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:735)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478)
... 42 more
在尝试了各种方法之后,我碰巧将这两行从JPA/DB配置文件移到了根配置文件的底部
<context:annotation-config/>
<context:component-scan base-package="my.app.service.layer"/>
我仍在学习Spring,但我认为它们出现的顺序存在问题
编辑:
这个问题似乎澄清了订单中的问题:
对于一个编码如下的电子邮件服务类,我一直在努力解决这个问题:
@Service("emailService")
public class EmailService {
@Autowired private JavaMailSenderImpl mailSender;
...
public void send(...) {
// send logic
}
}
我在阅读相关主题时遇到了一个解决方案。关键点是JavaMailSender
接口在applicationContext.xml
中定义为SpringJavaMailSenderImpl
类
步骤1:修改应用程序上下文文件以包含以下bean定义:
<bean id="mailSender"
class="org.springframework.mail.javamail.JavaMailSenderImpl"
p:host="myMailserver.mycompany.com" />
瞧!春天是快乐的。我希望听到对原始错误的正确解释。我已经尝试过了,它给出了相同的错误。我将把它添加回我原来的帖子中。还有其他想法吗?还有两件事你可以试试。在xml中添加另一行以指定扫描bean的位置,并尝试将电子邮件发件人bean上的autowire候选属性设置为true。我能够重现您的错误,组件扫描应该可以解决您的问题。我尝试了组件扫描和autowire候选,但不幸的是,这两种方法都不起作用。我已经在root-context.xml中进行了组件扫描。我还在上面的servlet-context.xml中添加了它,但它没有做任何事情:上面的代码使用了什么xml文件?您使用了多少种不同的xml文件?我遇到了同样的问题,在xml中配置时,一切都正常。从服务bean emailServiceImpl中删除了自动连线和@service注释。自动布线在其他bean中工作良好。我想知道JavaMail中的自动连线有什么问题。
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.springframework.mail.javamail.JavaMailSender] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:952)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:821)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:735)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478)
... 42 more
<context:annotation-config/>
<context:component-scan base-package="my.app.service.layer"/>
@Service("emailService")
public class EmailService {
@Autowired private JavaMailSenderImpl mailSender;
...
public void send(...) {
// send logic
}
}
<bean id="mailSender"
class="org.springframework.mail.javamail.JavaMailSenderImpl"
p:host="myMailserver.mycompany.com" />
@Service("emailService")
public class EmailService {
@Autowired private JavaMailSender mailSender; // Observe the change in the type
...