关于spring mvc 注解找不到bean 的问题

J2EE 码拜 8年前 (2016-05-28) 1434次浏览
    以前没弄过spring的东东,最近有需要用spring弄报表相关的东东。这不,报表功能还没添加,各种配置问题,各种奇奇怪怪的问题出现了,“新手定理”被完美诠释了。
一直报错,不懂什么意思。明明已经写了自动注入和组件标记。
错误信息如下:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.cn.wuxiong.spring.school.dao.StudentDao] 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)}
对应的java实体类如下:

package com.cn.wuxiong.spring.school.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
@Entity
@Table(name = "aastudent", catalog = "itsm")
@NamedQueries({
		@NamedQuery(name = "findAllStudents", query = "SELECT s FROM Student s"),
		@NamedQuery(name = "findStudentById", query = "SELECT s FROM Student s where s.id=?") })
public class Student {
	private Long id;
	private String stuNo;
	private String name;
	private Integer age;
	private String sex;
	public Student() {
	};
	public Student(Long id, String stuNo, String name, Integer age, String sex) {
		this.id = id;
		this.stuNo = stuNo;
		this.name = name;
		this.age = age;
		this.sex = sex;
	}
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "ID", nullable = false)
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	@Column(name = "stuNo", nullable = false)
	public String getStuNo() {
		return stuNo;
	}
	public void setStuNo(String stuNo) {
		this.stuNo = stuNo;
	}
	@Column(name = "name", nullable = false)
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Column(name = "age", nullable = false)
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	@Column(name = "sex", nullable = false)
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
}

============================================================================
然后对应的dao,这个类里面没什么具体的方法,只是个接口,方法都在上一级接口中:

package com.cn.wuxiong.spring.school.dao;
import org.springframework.data.repository.PagingAndSortingRepository;
import com.cn.wuxiong.spring.school.domain.Student;
public interface StudentDao extends PagingAndSortingRepository<Student, Long>,StudentDaoEx {//
}

========
对应的StudentDaoEx 接口:

package com.cn.wuxiong.spring.school.dao;
import org.springframework.stereotype.Repository;
import com.cn.wuxiong.spring.school.domain.Student;
@Repository
public interface StudentDaoEx {
	public int getCount();
	public void persist(Student st);
	public void testFunc();
}

===========
对应的上一个接口的实现类如下,为了测试,故而写了相当少的测试方法:

package com.cn.wuxiong.spring.school.dao;
import org.springframework.stereotype.Repository;
import com.cn.wuxiong.spring.school.domain.Student;
@Repository
public class StudentDaoImpl implements StudentDaoEx {
	@Override
	public void testFunc(){
		System.out.println("#############Test DAO");
	}

	public void persist(Student st){
		System.out.println(st);
	}

	public int getCount(){
		System.out.println("数量为:3");
		return 3;
	}
}

=========================================================================
而后对应的service如下:

package com.cn.wuxiong.spring.school.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import com.cn.wuxiong.spring.school.dao.StudentDao;
@org.springframework.stereotype.Service
@Transactional
public class SchoolService {
	@Autowired
	private StudentDao dao;
	public void testService() {
		// dao.testFunc();
		System.out.println("###########################Test service");
	}
}

==========================================================
对应的controller为:

package com.cn.wuxiong.spring.school.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.cn.wuxiong.spring.school.service.SchoolService;
@Controller
@RequestMapping(value = "/itsm/school")
public class SchoolCtrl {
	@Autowired
	private SchoolService schoolService;
	@RequestMapping(value="/student.do", method = RequestMethod.GET)
	public String pagingList() {
		schoolService.testService();
		return "school/studentManagement";
	}
	// 新建
	@RequestMapping(value = "/create", method = RequestMethod.GET)
	public String createPage(Model model) {
		model.addAttribute("action_type", "create");
		return "school/add_update_student";
	}
}
解决方案

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于spring mvc 注解找不到bean 的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)