Spring不能向Socket注入对象?

LittleLeeZi 2014-01-14 10:04:56

如图所示,对象datasyncSiteDaoImpl是null,说明Spring注入失败。
spring配置文件没有问题,这个类在ServletContextListener中实例化的
...全文
426 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
颖辉小居 2015-12-18
  • 打赏
  • 举报
回复
同样的问题 虽然 ApplicationContext factory=new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); policeService = (PoliceService) factory.getBean("policeServiceImpl"); 可以实现,但是这样是有隐患的吧,这相当于两个Spring容器了。是不是线程不安全呢?
LittleLeeZi 2014-01-15
  • 打赏
  • 举报
回复
引用 19 楼 suciver 的回复:
[quote=引用 18 楼 lkl713 的回复:] [quote=引用 15 楼 suciver 的回复:] [quote=引用 14 楼 lkl713 的回复:] Socket类无法交给spring管理,那就无法给serverSession注入socket,除了用new来新建ServerSession,貌似没有办法了
你用new来创建ServerSession了那么里面的DatasyncSiteDao就不能用这种注入了,要用spring的ApplicationContext.getBean("datasyncSiteDao")这样的方式获取 DatasyncSiteDao datasyncSiteDaoImpl=(DatasyncSiteDao)org.springframework.web.context.ContextLoader.getCurrentWebApplicationContext().getBean("datasyncSiteDao"); 不过我觉得很奇怪你这个完全是javase就可以搞定的干嘛要放在web上[/quote] 项目用的是ssh,如果用javaSE实现,就得再写一遍jdbc[/quote] 你javase的干嘛要用struts2或者spring mvc呢直接spring+hibernate就够了。不过你如果非要用就用我那种方式获取[/quote] 是个web应用,现在是有个功能需要用到Socket通信而已
LittleLeeZi 2014-01-15
  • 打赏
  • 举报
回复
引用 17 楼 jimmy609 的回复:
前几天碰到过类似的问题,可以这样做 HttpServletRequest request = ServletActionContext.getRequest(); ServletContext sc = request.getSession().getServletContext(); WebApplicationContext webAppCtx = WebApplicationContextUtils.getRequiredWebApplicationContext(sc); 你要的bean bean = (你要的bean) webAppCtx .getBean("你要的bean");
你和楼上的思路是一样的,就是通过BeanFactory或ApplicationContext,这种方法是可以的
suciver 2014-01-15
  • 打赏
  • 举报
回复
引用 18 楼 lkl713 的回复:
[quote=引用 15 楼 suciver 的回复:] [quote=引用 14 楼 lkl713 的回复:] Socket类无法交给spring管理,那就无法给serverSession注入socket,除了用new来新建ServerSession,貌似没有办法了
你用new来创建ServerSession了那么里面的DatasyncSiteDao就不能用这种注入了,要用spring的ApplicationContext.getBean("datasyncSiteDao")这样的方式获取 DatasyncSiteDao datasyncSiteDaoImpl=(DatasyncSiteDao)org.springframework.web.context.ContextLoader.getCurrentWebApplicationContext().getBean("datasyncSiteDao"); 不过我觉得很奇怪你这个完全是javase就可以搞定的干嘛要放在web上[/quote] 项目用的是ssh,如果用javaSE实现,就得再写一遍jdbc[/quote] 你javase的干嘛要用struts2或者spring mvc呢直接spring+hibernate就够了。不过你如果非要用就用我那种方式获取
LittleLeeZi 2014-01-15
  • 打赏
  • 举报
回复
引用 15 楼 suciver 的回复:
[quote=引用 14 楼 lkl713 的回复:] Socket类无法交给spring管理,那就无法给serverSession注入socket,除了用new来新建ServerSession,貌似没有办法了
你用new来创建ServerSession了那么里面的DatasyncSiteDao就不能用这种注入了,要用spring的ApplicationContext.getBean("datasyncSiteDao")这样的方式获取 DatasyncSiteDao datasyncSiteDaoImpl=(DatasyncSiteDao)org.springframework.web.context.ContextLoader.getCurrentWebApplicationContext().getBean("datasyncSiteDao"); 不过我觉得很奇怪你这个完全是javase就可以搞定的干嘛要放在web上[/quote] 项目用的是ssh,如果用javaSE实现,就得再写一遍jdbc
咖啡加糖_ 2014-01-15
  • 打赏
  • 举报
回复
前几天碰到过类似的问题,可以这样做 HttpServletRequest request = ServletActionContext.getRequest(); ServletContext sc = request.getSession().getServletContext(); WebApplicationContext webAppCtx = WebApplicationContextUtils.getRequiredWebApplicationContext(sc); 你要的bean bean = (你要的bean) webAppCtx .getBean("你要的bean");
长腮的北极熊 2014-01-15
  • 打赏
  • 举报
回复
引用 15 楼 suciver 的回复:
[quote=引用 14 楼 lkl713 的回复:] Socket类无法交给spring管理,那就无法给serverSession注入socket,除了用new来新建ServerSession,貌似没有办法了
你用new来创建ServerSession了那么里面的DatasyncSiteDao就不能用这种注入了,要用spring的ApplicationContext.getBean("datasyncSiteDao")这样的方式获取 DatasyncSiteDao datasyncSiteDaoImpl=(DatasyncSiteDao)org.springframework.web.context.ContextLoader.getCurrentWebApplicationContext().getBean("datasyncSiteDao"); 不过我觉得很奇怪你这个完全是javase就可以搞定的干嘛要放在web上[/quote] 同意...
suciver 2014-01-15
  • 打赏
  • 举报
回复
引用 14 楼 lkl713 的回复:
Socket类无法交给spring管理,那就无法给serverSession注入socket,除了用new来新建ServerSession,貌似没有办法了
你用new来创建ServerSession了那么里面的DatasyncSiteDao就不能用这种注入了,要用spring的ApplicationContext.getBean("datasyncSiteDao")这样的方式获取 DatasyncSiteDao datasyncSiteDaoImpl=(DatasyncSiteDao)org.springframework.web.context.ContextLoader.getCurrentWebApplicationContext().getBean("datasyncSiteDao"); 不过我觉得很奇怪你这个完全是javase就可以搞定的干嘛要放在web上
loveunittesting 2014-01-14
  • 打赏
  • 举报
回复
这个类在ServletContextListener中实例化的, 可能是这的问题,你自己实例化,并不是spring管理的bean,是不同的实例。导致你使用的时候没有使用spring管理的那个实例,而是你自己初始化的那个
LittleLeeZi 2014-01-14
  • 打赏
  • 举报
回复
引用 1 楼 yys79 的回复:
ServerSession必须作为一个bean给spring管理才行,否则,要用那个xxxUtils获得context再getBean才行
好像是先实例化的ServerSession,然后才实例化的datasyncSiteDaoImpl
LittleLeeZi 2014-01-14
  • 打赏
  • 举报
回复
引用 1 楼 yys79 的回复:
ServerSession必须作为一个bean给spring管理才行,否则,要用那个xxxUtils获得context再getBean才行

我按你说的加了个注解,还是不行。构造方法在程序启动时调用了,但属性还是没有注入进来
loveunittesting 2014-01-14
  • 打赏
  • 举报
回复
ServerSession必须作为一个bean给spring管理才行,否则,要用那个xxxUtils获得context再getBean才行
LittleLeeZi 2014-01-14
  • 打赏
  • 举报
回复
引用 12 楼 suciver 的回复:
楼主不是在Server的new而是在Server的run方法里面new ServerSession这样的自然不是spring所创建的ServerSession实例也就不会注入成功了
Socket类无法交给spring管理,那就无法给serverSession注入socket,除了用new来新建ServerSession,貌似没有办法了
LittleLeeZi 2014-01-14
  • 打赏
  • 举报
回复
引用 12 楼 suciver 的回复:
楼主不是在Server的new而是在Server的run方法里面new ServerSession这样的自然不是spring所创建的ServerSession实例也就不会注入成功了
说的有道理,那如果把serverSession配置成Server的一个属性,利用注解该怎么把socket对象给serverSession呢?就是说有参的构造方法该怎么用注解配置呢?
suciver 2014-01-14
  • 打赏
  • 举报
回复
楼主不是在Server的new而是在Server的run方法里面new ServerSession这样的自然不是spring所创建的ServerSession实例也就不会注入成功了
LittleLeeZi 2014-01-14
  • 打赏
  • 举报
回复
引用 8 楼 breakorcontinue 的回复:
我想你应该把调用的地方也粘贴出来,我觉得是你调用的时候对象出现的问题



我觉得问题在于Server的初始化是用new的方式,而不是spring创建的
suciver 2014-01-14
  • 打赏
  • 举报
回复
引用 9 楼 lkl713 的回复:
[quote=引用 6 楼 suciver 的回复:] 你spring的配置文件里<context:component-scan base-package="" />这个注解扫描基本的包有包括你的这个类吗
有的[/quote] 那你是怎么调用的
LittleLeeZi 2014-01-14
  • 打赏
  • 举报
回复
引用 6 楼 suciver 的回复:
你spring的配置文件里<context:component-scan base-package="" />这个注解扫描基本的包有包括你的这个类吗
有的
长腮的北极熊 2014-01-14
  • 打赏
  • 举报
回复
我想你应该把调用的地方也粘贴出来,我觉得是你调用的时候对象出现的问题
乔不思 2014-01-14
  • 打赏
  • 举报
回复
你的这样配置是可以的,看一下你的xml配置文件 是否正确。这种注入不存在问题,
加载更多回复(1)

81,092

社区成员

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

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