WebSocket注入Bean后报null,操作不了数据库的解决方法
2016-12-24 15:05
585 查看
注入Service访问时报null,多番查询终于得以解决
我有个需求是微信小程序要通过WebSocket获取数据传到后端,进而操作数据库,给MyWebSocket处理类加了@Controller注解,通过@Resource注解注入Service,结果访问时报null,网上搜了很多,花了很长时才搞定,写此博文,即搜即用,经过整理,现附上解决方法(我用的Springboot框架):新建SpringUtil
修改启动类App.java
修改MyWebSocket处理类
第一步
//新建SpringUtil用来获取bean import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; public class SpringUtil implements ApplicationContextAware{ private static ApplicationContext applicationContext = null; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { if(SpringUtil.applicationContext == null){ SpringUtil.applicationContext = applicationContext; } System.out.println("---------------simple.plugin.spring.SpringUtil------------------------------------------------------"); System.out.println("========ApplicationContext配置成功,在普通类可以通过调用SpringUtils.getAppContext()获取applicationContext对象,applicationContext="+SpringUtil.applicationContext+"========"); } //获取applicationContext public static ApplicationContext getApplicationContext() { return applicationContext; } //通过name获取 Bean. public static Object getBean(String name){ return getApplicationContext().getBean(name); } //通过class获取Bean. public static <T> T getBean(Class<T> clazz){ return getApplicationContext().getBean(clazz); } //通过name,以及Clazz返回指定的Bean public static <T> T getBean(String name,Class<T> clazz){ return getApplicationContext().getBean(name, clazz); } }
第二步
//修改启动类App.java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; import org.springframework.web.bind 4000 .annotation.RestController; @SpringBootApplication @ServletComponentScan @RestController @Import(value={SpringUtil.class}) //引入SpringUtil public class App { /**注册Spring Util * 这里为了和上一个冲突,所以方面名为:springUtil2 * 实际中使用springUtil */ @Bean public SpringUtil springUtil2(){ return new SpringUtil(); } public static void main(String[] args) { SpringApplication.run(App.class, args); } }
第三步通过SpringUtil.getBean(BeanName)获取bean,这里的BeanName即@service(“BeanName”),注意需要强转为你的service类的类型
//修改MyWebSocket处理类 @OnMessage public void onMessage (String message, Session session) throws IOException { System.out.println("来自客户端的消息:" + message); String id = message; //获取bean,"vodStaService"为service的Name vodStaService service = (vodStaService) SpringUtil.getBean("vodStaService"); //更新 service.updateByVdid(id); //查询 vodSta selectedNum = service.selectByVdid(id); String number = selectedNum.getSelectedNum(); // 群发消息 for ( MyWebSocket item : webSocketSet ){ item.sendMessage(number); } }
好了,至此,这个问题完美解决,谢谢大神们的分享,有问题请留言~
这里导入bean的方法参考于大神林祥纤的博客 —— [ Spring Boot普通类调用bean ]
相关文章推荐
- 使用mybatis操作数据库sum方法返回null解决方法
- springboot websocket 解决不能注入bean问题
- Spring在Java Filter注入Bean为Null的问题解决
- sql server 还原数据库时提示数据库正在使用,无法进行操作的解决方法
- Spring中c3p0连接池的配置 及JdbcTemplate的使用 通过XML配置文件注入各种需要对象的操作 来完成数据库添加Add()方法
- sqlite:多线程操作数据库“database is locked”解决方法
- sqlite:多线程操作数据库“database is locked”解决方法(二)
- sql server 还原数据库时提示数据库正在使用,无法进行操作的解决方法
- hadoop超时解决办法context.progress()的作用 假设在map()方法中,你有一个从数据库读取大量数据的操作,是用一个循环来完成的,并且,在读完全部的数据之前,你不会有任何的数据输出
- spring中使用@RequestBody,对应的bean中属性名大写注入为空的解决方法
- sql server 还原数据库时提示数据库正在使用,无法进行操作的解决方法
- Andorid中操作数据库的insert的两种方法以及nullColumnHack
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (二)想对DBExpress的TSQLDataSet写对数据库操作的SQL语句出错了!
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (二)想对DBExpress的TSQLDataSet写对数据库操作的SQL语句出错了!
- Labview数据库基本操作及相关一些步骤和疑问解决方法
- VC编译没有错误,exe文件操作数据库(ADO/MDB)时报错,解决方法
- 在使用阿里的开源数据库同步服务otter时,使用Spring-Cache导致Spring找不到Bean方法时的解决方法
- PHP使用PDO操作数据库的乱码问题解决方法
- PHP使用PDO操作数据库的乱码问题解决方法
- 数据库中的并发操作带来的一系列问题及解决方法