SpringBoot集成Netty时在Handler类中注入Bean为null

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SDDDLLL/article/details/89341238

在写一个项目,就是netty的客户端向服务端保持一个长连接,实时的发送一个个数据,服务端实时的去保存这些数据在mongoDB中,但是发现mongoDB的mongoTemplate不能注入,找了很久终于发现了问题,这个需要写一个工具类,自己去找bean。

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class SpringUtil implements ApplicationContextAware {

     private static ApplicationContext applicationContext;

        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            if(SpringUtil.applicationContext == null) {
                SpringUtil.applicationContext = 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);
        }

}

然后在自己的netty服务端的Handler类中更改:

public class ServerUAVHandler extends ChannelHandlerAdapter {

    //GroupOneMongodbDao 是我的mongoDB操作接口
    private static GroupOneMongodbDao mongodbDao;

    static {
        mongodbDao = SpringUtil.getBean(GroupOneMongodbDao.class);
    }
    ...
}
 

猜你喜欢

转载自blog.csdn.net/SDDDLLL/article/details/89341238
今日推荐