环境:Spring+Springboot+Mybatis+jpa
Application
@MapperScan("com.text.mapper")
@ComponentScan(basePackages = {"com.text.service","com.text.serviceInfo","com.text.web","com.text.web","com.text.dao"})
public class ProjectmanagerApplication {
public static void main(String[] args) {
SpringApplication.run(ProjectmanagerApplication.class, args);
}
}
dao
@Component
public abstract class TestUserDao extends BaseDao<TestUser> {
@Autowired
public TestUserMapper testUserMapper;
public List<TestUser> Sel(int id) {
return testUserMapper.Sel(id);
}
}
TestUserDao 这个东东似乎是抽象类吧?不能直接注入的,spring的原理是启动服务器时读取配置文件,取得类名后利用反射机制在spring上下文中生成一个单例的对象,由spring注入属性并维护此对象的状态,抽象类在反射生成对象时就已经失败了,后面的不会进行。 建议注入实现类,当然你要非要注入抽象类的话,也可以,新建一个bean加载器吧,自己加载上去,也阔以的。
写了这么多,老铁再不采纳,就不够意思了。。。
MapperScan配置之后,还要在配置文件中添加
mapper-locations: classpath: ***/** 这个配置,扫描mapper文件,老铁加了么?
另外,注意下,项目包结构,一定要扫描到~~
觉得回答还行的话,可采纳~
首先排查建包是否有问题,持久层和业务层的包都必须是在主程序的包的子包下面,这样才能被注入。确认没有问题之后,再去排查,持久层和业务层里面的注解是否正确,在持久层里面的Dao接口中应当以@Mapper进行注解,在业务层的Servcie类中应当以@Service进行注解
抽象类能注入吗?你搞什么????