您的位置:首页 > 数据库

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 ]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐