这是 MVC DAO 的正确方法吗?我收到类似自动装配依赖项注入失败的错误

Posted

技术标签:

【中文标题】这是 MVC DAO 的正确方法吗?我收到类似自动装配依赖项注入失败的错误【英文标题】:Is this the correct method for MVC DAO ? I got error like Injection of autowired dependencies failed 【发布时间】:2017-05-17 07:43:00 【问题描述】:

我是 spring 的新手,我面临以下错误。请帮帮我。 提前致谢。

用户界面

package com.system.dao;

import java.util.List;

import com.system.model.User;

public interface UserDAO 

public String createOrUpdate(User user);
public List<User> getAllUser();
public String delete(User user);
 

用户界面实现

public class UserDAOImpl implements UserDAO 

 private NamedParameterJdbcTemplate jdbc;

@Autowired
public void setJdbc(DataSource jdbc) 
    this.jdbc = new NamedParameterJdbcTemplate(jdbc);


@Transactional
@Override
public String createOrUpdate(User user) 
    BeanPropertySqlParameterSource params = new BeanPropertySqlParameterSource(user);
    if (user.isUpdate()) 
        jdbc.update(
                "update login set login_id=:loginId,login_password:loginPassword,user_name=:userName,user_contact=:userContact,user_email=:userEmail where user_id=:userId",
                params);
        return "User Updated";
     else 
        jdbc.update(
                "insert into login(login_id,login_password,user_name,user_contact,user_email) values(:loginId,:loginPassword,:userName,:userContact,:userEmail)",
                params);
        return "User added";
    



@Override
public List<User> getAllUser() 
    jdbc.query("select * from login", new RowMapper<User>() 
        @Override
        public User mapRow(ResultSet rs, int num) throws SQLException 
            // TODO Auto-generated method stub
            User user = new User();
            user.setLoginId(rs.getString("login_id"));
            user.setLoginPassword(rs.getString("login_password"));
            user.setUserContact(rs.getString("user_contact"));
            user.setUserEmail(rs.getString("user_email"));
            user.setUserId(rs.getInt("user_id"));
            user.setUserName(rs.getString("user_name"));

            return user;
        
    );
    return null;


@Override
public String delete(User user) 
    jdbc.update("delete from login where user_id:userId", new MapSqlParameterSource("userId", user.getUserId()));
    return "User deleted";


 

用户服务

package com.system.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.system.dao.impl.UserDAOImpl;
import com.system.model.User;

@Service
public class UserService  

private UserDAOImpl userDAOImpl;

@Autowired(required=true)
public void setUserDAOImpl(UserDAOImpl userDAOImpl) 
    this.userDAOImpl = userDAOImpl;

public String createOrUpdate(User user) 
    return userDAOImpl.createOrUpdate(user);

public List<User> getAllUser() 
    return userDAOImpl.getAllUser();


public String delete(User user) 
    return userDAOImpl.delete(user);






上下文(dao-context)

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

<context:component-scan base-package="com.system.dao.impl">
</context:component-scan>
<context:component-scan base-package="com.system.service">
</context:component-scan>

【问题讨论】:

堆栈跟踪在哪里? :) 你在哪里定义你的 bean? 【参考方案1】:

您在UserDAOImpl 中缺少@Repository

@Repository("userDAOImpl")
public class UserDAOImpl implements UserDAO 

要将 java 类转换为 spring 组件,您需要使用以下任何一种注释类

@Controller @Component @Repository @Service

由于UserDAOImpl是属于DAO层的dao,所以@Repository是最合适的。

阅读更多 http://howtodoinjava.com/spring/spring-core/how-to-use-spring-component-repository-service-and-controller-annotations/

【讨论】:

谢谢Jobin,你能解释一下为什么需要这样做吗

以上是关于这是 MVC DAO 的正确方法吗?我收到类似自动装配依赖项注入失败的错误的主要内容,如果未能解决你的问题,请参考以下文章

java的mvc模式中bean.dao.service三层中都放啥东西啊?能具体说说吗?

C# MVC 使用复选框选项构造视图并将答案自动绑定到对象的正确方法?

Spring MVC 预授权控制器操作未收到 POST 请求

Java 表单框架

使用 Spring Test 自动回滚 DAO 集成测试是一种好习惯吗?

Spring MVC 在 JSP 中正确显示 arraylist