引言
之前有碰到这个问题大概四五次但是没记录下来…今天写demo的时候又遇到这类问题花了两个小时。看了看网上博客很多都是掩耳盗铃取消设置的做法…故此记录总结下来分享
一、装配的类上没有加注解
装配的类上应有 @Component、@Service 、@Repository …等注解
如:
@Repository
public class CustomerDAO {
@Value("${data.class}")
private String tempClass;
public String getTempClass() {
return tempClass;
}
public void addCustomers(){
System.out.println(tempClass);
// 转化的数据类型为Excel
try {
System.out.println(tempClass);
Class<?> classType=Class.forName(tempClass);
try {
DataConvertor dataConvertor = (DataConvertor) classType.newInstance();
dataConvertor.readFile();
} catch (InstantiationException | IllegalAccessException e) {
log.debug("方法或构造器没有权限");
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
log.debug("相应的类未找到");
e.printStackTrace();
}
}
}
二、启动类的路径不对
启动类应与所在装配类的实体包的目录在同父级目录下如:
装配CustomeerDao类的所在的实体类包entity父级目录edu与启动类同属于example的包下:
如果实在不确定目录是否正确可以多试试几次,看是否是这个问题。
三、未扫描到这个Bean
配置一个config类,设置扫描路径就行:
路径:
配置类代码:
@Configuration
@ComponentScan(basePackages = {
"com.example.edu"})
public class knowledgereviewConfig {
}
四、测试时未装配到
如果你是用Springboot,junit单元测试,测试类上应
有@RunWith(SpringRunner.class)、@SpringBootTest
注解
如:
@RunWith(SpringRunner.class)
@SpringBootTest
class KnowledgeReviewApplicationTests {
@Autowired
CustomerDAO customerDAO;
@Test
public void LSPTest(){
EmailSender emailSender = new EmailSender();
VIPCustommer vipCustommer = new VIPCustommer();
emailSender.send(vipCustommer);
}
@Test
public void DIPTest(){
customerDAO.addCustomers();
}
}
五、注意装配的类是否正确
这次写demo就是两个类同名,虽然配置好了,但是引入错了…所以一定要看好是否引入的类是否正确,再去寻找配置问题。