我已经编写了自己的格式化程序并试图将服务自动装入其中,但我得到了NullPointerException
。
格式化:
@Component
public class DepartmentFormatter implements Formatter<Department> {
@Autowired
private DepartmentService departmentService;
@Override
public String print(Department department, Locale locale) {
return department.getName();
}
@Override
public Department parse(String string, Locale locale) throws ParseException {
return departmentService.getByName(string); // NPE thrown here
}
}
服务:
@Service
@Transactional
public class DepartmentServiceImpl implements DepartmentService {
@Autowired
private DepartmentDAO departmentDAO;
/* ... */
}
在我的spring-servlet.xml中,我有
<context:annotation-config />
<context:component-scan base-package="net.kurochenko.sampleapp" />
public class FormattingFactory extends FormattingConversionServiceFactoryBean {
@Override
public void installFormatters(FormatterRegistry registry) {
super.installFormatters(registry);
registry.addFormatterForFieldAnnotation(new AuthorAnnotationFormatterFactory());
registry.addFormatterForFieldAnnotation(new DepartmentAnnotationFormatterFactory());
}
}
FormattingFactory bean
<mvc:annotation-driven conversion-service="formattingFactory" />
所有上述类都在net.kurochenko.sampleapp包中。
@Controller
中的自动装配服务正常。我正在谷歌上寻找解决方案,并尝试了其中的一些,但例外仍然存在。我究竟做错了什么?谢谢你的建议。
答案 0 :(得分:1)
您最有可能使用new DepartmentFormatter()
注册格式化程序。 不会以这种方式工作 - spring没有机会注入依赖项。
您应该注册spring bean实例(由spring创建)。无论是以编程方式还是通过xml。