找不到bean定义,我也应该注释一个接口吗?

时间:2013-04-10 12:17:42

标签: java spring spring-mvc spring-3

我的界面如下所示

   public interface UserManager {

      void insertUser(User user);
   .......

现在我有一个实现类,如下所示

@Service
public class UserManagerImpl implements UserManager {

    @Autowired
    private UserDAO userDAO;

在我的控制器中

@Controller
public class ExampleGizmoController {

    @Autowired
    private UserManager userManager;

UserDAOImpl是

@Service
public class UserDAOImpl implements UserDAO {

    @Autowired
    private SessionFactory sessionFactory;

我的application-context.xml

<context:annotation-config/>
<context:component-scan base-package="com.foo" />

扫描我的所有包。我已将其部署为war文件,部署发生时, userManager属性未自动连接到ExampleGizmoController,并在tomcat中显示错误,如下所示

Spring-MVC threw load() exception: org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type [com.foo.UserManager] 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)}

我能够发现自动装配没有发生,即使它是注释驱动并且组件扫描已打开。我还应该为自动装配工作做些什么吗?

4 个答案:

答案 0 :(得分:1)

 <mvc:annotation-driven/>
配置文件中还需要

答案 1 :(得分:0)

也许这很愚蠢...但是尝试从UserManager Impl中删除实现UserManager ..

答案 2 :(得分:0)

您应该使用@Service("userManager")。它告诉Spring你想用“userManager”命名你的UserManagerImpl bean实例。

答案 3 :(得分:0)

我面临同样的错误,但我还有一个dao类,它检索用户管理器的信息。您应该将@Repository注释添加到dao类。 你的另一个dao类看起来像那样;

@Repository("userManagerDao")
public class UserManagerDAOImpl implements UserManagerDao{
    public UserManagerDTO createNewUserManager() {
        UserManagerDTO userManager = new UserManagerDTO();
        userManager.setId(1);
        userManager.setFirstName("First Name");
        userManager.setLastName("Last Name");
        return userManager;
    }
}