使用Spring @Autowired注入一个对象,运行时为null
@Service("companyService")
public class CompanyServiceImpl implements CompanyService {
private CompanyMapper companyMapper;
public CompanyMapper getCompanyMapper() {
return companyMapper;
}
@Autowired
public void setCompanyMapper(CompanyMapper companyMapper) {
this.companyMapper = companyMapper;
}
@Override
public int insert(Company com) {
// TODO Auto-generated method stub
return companyMapper.insert(com);
}
}
测试类(正常运行)
@RunWith(SpringJUnit4ClassRunner.class)
//告诉junit spring配置文件
@ContextConfiguration({ "classpath:spring-mybatis.xml", "classpath:spring.xml" })
public class CompanyServiceTest {
@Autowired
private CompanyService service;
@Test
public void testInsert() {
Company c = new Company();
c.setName("ppp");
c.setBoss("yu");
service.insert(c);
}
}
项目中,我在一个线程中注入
public class GetDataRunnable implements Runnable {
private CompanyService companyService;
@Autowired
public void setCompanyService(CompanyService companyService) {
this.companyService = companyService;
}
@Override
public void run() {
//业务操作
}
}
在run()方法中调用service.insert(com)
报了NullPointerException
为什么会这样?求高手指教!
相关推荐
Spring Boot Mapper注入错误[源码]
文章讨论了在使用Spring Boot时遇到的一个常见错误:无法调用UserMapper的方法,因为userMapper为null。作者指出这是由于没有使用@Autowired注解来注入Mapper类导致的。Spring Boot要求所有带有@标记的Mapper类在声明时都必须使用@Autowired进行注入,否则会导致无法找到Mapper实例。这个错误虽然简单,但对于初学者来说很容易忽视。作者通过分享自己的经验提醒开发者在使用Spring Boot时要注意正确的依赖注入方式,避免类似的错误发生。
不推荐使用@Autowired原因[源码]
本文探讨了在Spring框架中不推荐使用@Autowired注解的原因及其替代方案。@Autowired虽然长期以来是依赖注入的主要方式,但其存在字段注入破坏封装性、难以测试、隐藏依赖关系、可能导致NPE、与单一职责原则冲突以及循环依赖问题等缺点。文章推荐使用构造函数注入作为更优的替代方案,因其明确声明所有必需依赖、依赖不可变、易于测试且在创建对象时就满足所有依赖。此外,还介绍了Setter注入适合可选依赖的情况。最后,提供了从@Autowired迁移到构造函数注入的策略,并强调遵循现代Spring最佳实践的重要性。
Autowired报错原因分析和4种解决方案.docx
Autowired报错原因分析和4种解决方案.docx
尚学堂_Spring_0300_IOC_Injection_Type
NULL 博文链接:https://listen-raining.iteye.com/blog/2128691
Spring IOC.pdf
Spring IOC操作的步骤,详细的步骤讲解截图,祝早日脱离苦海!祝早日成功! (IOC的设计模式)


Web 开发
