ssh框架,用注释完成的,普通类怎么调用service层

jiangzhe556 2014-06-19 12:46:52
public class XYDBTask extends TimerTask {
@Resource(name = "deviceConfigServiceImpl")
private IDeviceConfigService deviceConfigService;


deviceConfigService.getDeviceConfigAll();//报错空指针
这种方法在action中完全可以,但是在这个类会报空指针异常。。在线等
...全文
1130 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
程序袁_哈哈 2014-06-23
  • 打赏
  • 举报
回复
三四楼正解,,, 不在spring中配制,spring无法注入的。。。 肯定为空的。
jackson__qi 2014-06-22
  • 打赏
  • 举报
回复
在你自己定义的类上面使用@component等,可以将你定义的类标识为bean.这样就受spring管理了。@autowired和@resources是指定类的装配策略,一个根据类型,一个根据name(失败后根据类型),根据经验,set和gdt方法不是必须的,可以直接标注到属性上(这样可能会有侵入性)。
jackson__qi 2014-06-22
  • 打赏
  • 举报
回复
在你自己定义的类上面使用@component等,可以将你定义的类标识为bean.这样就受spring管理了。@autowired和@resources是指定类的装配策略,一个根据类型,一个根据name(失败后根据类型),根据经验,set和gdt方法不是必须的,可以直接标注到属性上(这样可能会有侵入性)。
jackson__qi 2014-06-22
  • 打赏
  • 举报
回复
在你自己定义的类上面使用@component等,可以将你定义的类标识为bean.这样就受spring管理了。@autowired和@resources是指定类的装配策略,一个根据类型,一个根据name(失败后根据类型),根据经验,set和gdt方法不是必须的,可以直接标注到属性上(这样可能会有侵入性)。
乔不思 2014-06-21
  • 打赏
  • 举报
回复
空指针,说明这个类就没有初始化, 你这个是普通类,在该类中只是添加了service层类的引用,根本就没有对其初始化,看楼主的做法是,给普通类的字段上面直接加上@resource进行注入,但楼主这样做忘记了一个前提,那就是 该类必须是spring管理的类, 如果是spring的管理的话,那么必须在这个类上加上 @Repository |@Service | @Controllo |@Component, 加上以后,就是spring管理的类了, 楼主要想让该类 脱离spring的管理,那么就必须手动的 把service层的类进行实例化,不然空指针问题不会得到解决的。
jl13972236494 2014-06-20
  • 打赏
  • 举报
回复
看你这问题一般都是没有get和set方法导致的错误!!!!没有set去赋值肯定是空的,。。。。
剑神一笑 2014-06-19
  • 打赏
  • 举报
回复
@Autowired 用这个注解 @Resource放这里是是情况
  • 打赏
  • 举报
回复
把private IDeviceConfigService deviceConfigService属性的setter和getter方法写出来,然后再在setter方法上加注解。
wyx100 2014-06-19
  • 打赏
  • 举报
回复
引用 11 楼 u012002376 的回复:
嗯,三楼,四楼正解,普通类想要调用service管理的类,需要在spring的配置文件里进行配置,要不然,spring不管理的东西,是用不了它的service的
满无解 2014-06-19
  • 打赏
  • 举报
回复
嗯,三楼,四楼正解,普通类想要调用service管理的类,需要在spring的配置文件里进行配置,要不然,spring不管理的东西,是用不了它的service的
逝去de奋斗 2014-06-19
  • 打赏
  • 举报
回复
话说调用service层的话是要在spring加配置文件的
ryan1214 2014-06-19
  • 打赏
  • 举报
回复
要么生成set方法,在spring中的XYDBTask注入deviceConfigService 要么通过spring的getBeanId去取
小红老公 2014-06-19
  • 打赏
  • 举报
回复
@Component public class XYDBTask extends TimerTask { @Autowired private IDeviceConfigService deviceConfigService; } 这样就应该没问题了,@Component注解会让spring管理这个类,@Autowired会注入你需要的Service
Anoth 2014-06-19
  • 打赏
  • 举报
回复
你这个类没有用spring管理,所以没法注入,如果需要在一些静态方法里面调用到bean,可以编写一个listener类,在初始化时保存上下文:public void contextInitialized(ServletContextEvent event) { super.contextInitialized(event); applicationContext = WebApplicationContextUtils .getRequiredWebApplicationContext(event.getServletContext()); } 在其他类里面用applicationContext.getBean(beanName)就可以获得到了
jackson_fighting 2014-06-19
  • 打赏
  • 举报
回复
请参见三楼和四楼。 普通类也是需要交给spring去管理,这样才可以调用service。或者在类上加上注解@Component
桃子_ 2014-06-19
  • 打赏
  • 举报
回复
2楼说得对,你只是用@Resource注册实例化了service 但是你没有get与set @Autowired就是get与set引用的
xxian2012 2014-06-19
  • 打赏
  • 举报
回复
你的这个普通类没有加载到spring的配置文件里面 你要在普通类里面拿就有ApplicationContext 类的getBean吧
dbwang 2014-06-19
  • 打赏
  • 举报
回复
普通类,你的类必须需要spring的bean管理,否则只能自己通过读取spring配置文件的形式getBean来实例化对象
jiangzhe556 2014-06-19
  • 打赏
  • 举报
回复
引用 1 楼 cbxjj 的回复:
@Autowired 用这个注解 @Resource放这里是是情况
不可以,能举个例子吗?

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧