綦霖
好记性不如烂笔头~ 持续写bug中...

最近搞了一下websocket前台(这个网上有很多的教程这里就不班门弄斧啦) 以及前后台的交互 和后台的bug(搞了两天) 也是状态频发 bug不断 下面说一说问题

Websocket主类里面无法注入Service 从而导致Service里Mapper也注入为null  具体原因的还是因为websocket主类里的一个

@Component 的注解 他的作用呢就是实例化 但是他是项目启动时就实例化的 这样 后续的注入就会注入不进去 后来自作聪明在主类里new的一个service 进去是进去了

但是在service进mapper的时候 mapper又注入不进去了 这次注入不进去的原因就是因为你这个service是new出来的所以无法注入 还是要从根本上及决问题啊;;;

    
@component (把普通pojo实例化到spring容器中,相当于配置文件中的 
<bean id="" class=""/>)

泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。

案例: 
<context:component-scan base-package=”com.*”> 
上面的这个例子是引入Component组件的例子,其中base-package表示为需要扫描的所有子包。 
共同点:被@controller 、@service、@repository 、@component 注解的类,都会把这些类纳入进spring容器中进行管理  

  解决方案: 注入不进去的根本原因还在于是加载主类的时候没有实例化到service 所以我们在Application 启动类里加入ConfigurableApplicationContext

   下面附上application、websocket上的代码供大家参考:
Application:
public static void main(String[] args) {
	SpringApplication springApplication = new SpringApplication(WebsocketApplication.class);
	ConfigurableApplicationContext configurableApplicationContext = springApplication.run(args);
	WebsocketServer.setApplicationContext(configurableApplicationContext);
}

  WebsocketServer:

  

    @Autowired
    private WebsocketService websocketService;

    private static ApplicationContext applicationContext;

    public static void setApplicationContext(ApplicationContext applicationContext){
        WebsocketServer.applicationContext = applicationContext;
    }

    //需要用到service的方法内
    websocketService=applicationContext.getBean(WebsocketService.class);
    

  

之后就是@Value注解在本WebsocketServer类里获取不到我在application.yml里配置的值  试了好多方法都不行(后来在ServiceImpl类里获取的值) 
哪位大佬有解决办法可以共享一下将感激不尽




 

posted on 2019-03-29 15:49  綦霖  阅读(7843)  评论(3编辑  收藏  举报