我试图注入我的对象,但它抛出空指针异常。请指教。我试图将资源名称作为大写和小写字母传递,但仍然会抛出相同的错误。
017-01-19T23:17:31.364+0800|Info: java.lang.NullPointerException
at com.vinoth.test.AppMain.mainMethod(AppMain.java:8)
at com.vinoth.test.HelloController.byParameter(HelloController.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
以下是我的组件类。
@Component
public class Processor {
public int sum(int a , int b){
return a+b;
}
}
错误在线: int value = processor.sum(1,2);
public class AppMain {
@Resource(name="Processor")
Processor processor;
public int mainMethod() {
int value = processor.sum(1, 2);
return value;
}
}
这是我的AppConfig类
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.vinoth.test")
public class AppConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/view/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("home");
registry.addStatusController("/detail", HttpStatus.BAD_REQUEST);
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
答案 0 :(得分:1)
您尚未为组件指定bean名称,因此它具有默认名称,在您的情况下为processor
,而不是Processor
注释中所述的@Resource
。
约定是在命名bean时使用标准Java约定作为实例字段名称。也就是说,bean名称以小写字母开头,从那时起就是驼峰式的。这些名称的示例是(没有引号)'accountManager','accountService','userDao','loginController'等。
如果我的建议无效,请尝试使用@Autowired
或@Inject
注释。如果多个相同类型的bean使用@Qualifier
来指定应该使用哪个bean。