问题描述
publicclassXYDBTaskextendsTimerTask{@Resource(name="deviceConfigServiceImpl")privateIDeviceConfigServicedeviceConfigService;deviceConfigService.getDeviceConfigAll();//报错空指针这种方法在action中完全可以,但是在这个类会报空指针异常。。在线等
解决方案
解决方案二:
@Autowired用这个注解@Resource放这里是是情况
解决方案三:
引用1楼cbxjj的回复:
@Autowired用这个注解@Resource放这里是是情况
不可以,能举个例子吗?
解决方案四:
普通类,你的类必须需要spring的bean管理,否则只能自己通过读取spring配置文件的形式getBean来实例化对象
解决方案五:
你的这个普通类没有加载到spring的配置文件里面你要在普通类里面拿就有ApplicationContext类的getBean吧
解决方案六:
2楼说得对,你只是用@Resource注册实例化了service但是你没有get与set@Autowired就是get与set引用的
解决方案七:
请参见三楼和四楼。普通类也是需要交给spring去管理,这样才可以调用service。或者在类上加上注解@Component
解决方案八:
你这个类没有用spring管理,所以没法注入,如果需要在一些静态方法里面调用到bean,可以编写一个listener类,在初始化时保存上下文:publicvoidcontextInitialized(ServletContextEventevent){super.contextInitialized(event);applicationContext=WebApplicationContextUtils.getRequiredWebApplicationContext(event.getServletContext());}在其他类里面用applicationContext.getBean(beanName)就可以获得到了
解决方案九:
@ComponentpublicclassXYDBTaskextendsTimerTask{@AutowiredprivateIDeviceConfigServicedeviceConfigService;}这样就应该没问题了,@Component注解会让spring管理这个类,@Autowired会注入你需要的Service
解决方案十:
要么生成set方法,在spring中的XYDBTask注入deviceConfigService要么通过spring的getBeanId去取
解决方案十一:
话说调用service层的话是要在spring加配置文件的
解决方案十二:
嗯,三楼,四楼正解,普通类想要调用service管理的类,需要在spring的配置文件里进行配置,要不然,spring不管理的东西,是用不了它的service的
解决方案十三:
引用11楼u012002376的回复:
嗯,三楼,四楼正解,普通类想要调用service管理的类,需要在spring的配置文件里进行配置,要不然,spring不管理的东西,是用不了它的service的
顶
解决方案十四:
把privateIDeviceConfigServicedeviceConfigService属性的setter和getter方法写出来,然后再在setter方法上加注解。
解决方案十五:
看你这问题一般都是没有get和set方法导致的错误!!!!没有set去赋值肯定是空的,。。。。
解决方案:
空指针,说明这个类就没有初始化,你这个是普通类,在该类中只是添加了service层类的引用,根本就没有对其初始化,看楼主的做法是,给普通类的字段上面直接加上@resource进行注入,但楼主这样做忘记了一个前提,那就是该类必须是spring管理的类,如果是spring的管理的话,那么必须在这个类上加上@Repository|@Service|@Controllo|@Component,加上以后,就是spring管理的类了,楼主要想让该类脱离spring的管理,那么就必须手动的把service层的类进行实例化,不然空指针问题不会得到解决的。
解决方案:
在你自己定义的类上面使用@component等,可以将你定义的类标识为bean.这样就受spring管理了。@autowired和@resources是指定类的装配策略,一个根据类型,一个根据name(失败后根据类型),根据经验,set和gdt方法不是必须的,可以直接标注到属性上(这样可能会有侵入性)。
解决方案:
在你自己定义的类上面使用@component等,可以将你定义的类标识为bean.这样就受spring管理了。@autowired和@resources是指定类的装配策略,一个根据类型,一个根据name(失败后根据类型),根据经验,set和gdt方法不是必须的,可以直接标注到属性上(这样可能会有侵入性)。
解决方案:
在你自己定义的类上面使用@component等,可以将你定义的类标识为bean.这样就受spring管理了。@autowired和@resources是指定类的装配策略,一个根据类型,一个根据name(失败后根据类型),根据经验,set和gdt方法不是必须的,可以直接标注到属性上(这样可能会有侵入性)。
解决方案:
三四楼正解,,,不在spring中配制,spring无法注入的。。。肯定为空的。