注入自动连接的依赖项失败; 嵌套exception是org.springframework.beans.factory.BeanCreationException:

我正在使用Spring,Hibernate,Struts和Maven创建Web应用程序。

运行mvn clean install命令时出现以下错误:

 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.project.action.PasswordHintActionTest': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.project.action.PasswordHintAction com.project.action.PasswordHintActionTest.action; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.project.action.PasswordHintAction] 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)} 

以下是具有Autowired依赖关系的类:

 import com.opensymphony.xwork2.Action; import org.project.model.User; import org.proejct.service.UserManager; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.subethamail.wiser.Wiser; import static org.junit.Assert.*; public class PasswordHintActionTest extends BaseActionTestCase { @Autowired private PasswordHintAction action; @Autowired private UserManager userManager; @Test public void testExecute() throws Exception { // start SMTP Server Wiser wiser = new Wiser(); wiser.setPort(getSmtpPort()); wiser.start(); action.setUsername("user"); assertEquals("success", action.execute()); assertFalse(action.hasActionErrors()); // verify an account information e-mail was sent wiser.stop(); assertTrue(wiser.getMessages().size() == 1); // verify that success messages are in the request assertNotNull(action.getSession().getAttribute("messages")); } } 

我的applicationcontext.xml

                    

我已添加到我的上下文配置中以扫描自动连接的依赖项。 但我不确定为什么它仍然给出这个例外。

我尝试按照以下方式添加它,但我仍然得到相同的exception

  

更新:

以下是密码提示操作

 import org.project.model.User; import com.project.webapp.util.RequestUtil; import org.springframework.mail.MailException; import org.springframework.security.core.userdetails.UsernameNotFoundException; import java.util.ArrayList; import java.util.List; public class PasswordHintAction extends BaseAction { private static final long serialVersionUID = -4037514607101222025L; private String username; /** * @param username The username to set. */ public void setUsername(String username) { this.username = username; } /** * Execute sending the password hint via e-mail. * * @return success if username works, input if not */ public String execute() { List args = new ArrayList(); // ensure that the username has been sent if (username == null) { log.warn("Username not specified, notifying user that it's a required field."); args.add(getText("user.username")); addActionError(getText("errors.requiredField", args)); return INPUT; } if (log.isDebugEnabled()) { log.debug("Processing Password Hint..."); } // look up the user's information try { User user = userManager.getUserByUsername(username); String hint = user.getPasswordHint(); if (hint == null || hint.trim().equals("")) { log.warn("User '" + username + "' found, but no password hint exists."); addActionError(getText("login.passwordHint.missing")); return INPUT; } StringBuffer msg = new StringBuffer(); msg.append("Your password hint is: ").append(hint); msg.append("\n\nLogin at: ").append(RequestUtil.getAppURL(getRequest())); mailMessage.setTo(user.getEmail()); String subject = '[' + getText("webapp.name") + "] " + getText("user.passwordHint"); mailMessage.setSubject(subject); mailMessage.setText(msg.toString()); mailEngine.send(mailMessage); args.add(username); args.add(user.getEmail()); saveMessage(getText("login.passwordHint.sent", args)); } catch (UsernameNotFoundException e) { log.warn(e.getMessage()); args.add(username); addActionError(getText("login.passwordHint.error", args)); getSession().setAttribute("errors", getActionErrors()); return INPUT; } catch (MailException me) { addActionError(me.getCause().getLocalizedMessage()); getSession().setAttribute("errors", getActionErrors()); return INPUT; } return SUCCESS; } } 

更新2:

的applicationContext-struts.xml中:

      

如果com.project.action.PasswordHintAction使用com.project.action.PasswordHintAction型注释进行注释,请使用下面给出的组件扫描

  

编辑

我看到你的问题,在PasswordHintActionTest你自动连接PasswordHintAction 。 但是您没有为PasswordHintAction创建bean配置以进行自动assembly。 将一个@Component, @Service, @Controller型注释( @Component, @Service, @Controller )添加到PasswordHintAction

 @Component public class PasswordHintAction extends BaseAction { private static final long serialVersionUID = -4037514607101222025L; private String username; 

或者在applicationcontext.xml创建xml配置

  

您需要提供autowire的候选人。 这意味着必须知道PasswordHint的一个实例,它可以猜测它必须引用它。

请提供PasswordHint的类头和/或该类的spring bean定义以获得进一步的帮助。

尝试更改名称

 PasswordHintAction action; 

 PasswordHintAction passwordHintAction; 

以便它匹配bean定义。