Spring 3 @Autowired在Formatter中抛出NPE

时间:2011-07-04 14:55:15

标签: java spring autowired

我已经编写了自己的格式化程序并试图将服务自动装入其中,但我得到了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" />

Registering of formatters

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中的自动装配服务正常。我正在谷歌上寻找解决方案,并尝试了其中的一些,但例外仍然存在。我究竟做错了什么?谢谢你的建议。

1 个答案:

答案 0 :(得分:1)

您最有可能使用new DepartmentFormatter()注册格式化程序。 不会以这种方式工作 - spring没有机会注入依赖项。

您应该注册spring bean实例(由spring创建)。无论是以编程方式还是通过xml。