• springboot项目问题记录one


    上面三个方法描述如下:

    首先有个业务,我是需要调取第三方一个sdk,然后sdk里面封装的kafka,也就是说,需要用sdk内置的连接kafka去消费消息,然后又有一个类需要实现Message,此Message也是sdk的,

    一个

    @Override
    public void receiveRealMessage(String data)

    这个是实现Message重写的方法,在这里面处理kafka消费到的数据。

    之后我又需要将数据存入数据库,本没多想,上来就直接注入

    @Autowired
    FaceOpaqDao faceOpaqDao;

    没成想一直报这个错

    结果发现dao根本注入不了,所以查阅资料,发现其实我这相当于不是spring自己家的产品了,要是定时器就可以,因为那是人家spring自己家的独立线程。

    所以在这里,不能直接注入了,那好啊,我就利用implements ApplicationContextAware的方式,去利用class获取bean,去获取dao,结果一试告成。

    代码如下:

    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.stereotype.Component;
    @Component
    public class getBeanClass implements ApplicationContextAware {
     
         private static ApplicationContext applicationContext;
     
            @Override
            public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
                if(getBeanClass.applicationContext == null) {
                    getBeanClass.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);
            }
     
    }

    ,然后吗,就是上面的图片所示,直接在我的实现message处理消费类里面,利用static{}静态代码块,获取到dao,搞定。

    为什么要用静态代码块,这个问题就问的我也不知道怎么回答了哈,

    首先,静态代码块特点:随着类的加载而执行,且只执行一次,并优先于主函数。用于给类初始化的。

    其次执行顺序:

    静态代码块随着类加载而加载

    有多个静态代码块的,按代码块前后顺序加载

    一个代码块,只执行一次。

  • 相关阅读:
    SAR图像处理 MSTAR数据库利用问题
    python 获取系统环境变量 os.environ and os.putenv
    python 模块中的 __init__.py __main__.py
    pylint python2.7 安装记录
    Python--字典
    哈希表
    AC自动机模板
    平衡树(Splay)模板
    矩阵快速幂 模板
    非递归线段树
  • 原文地址:https://www.cnblogs.com/emperorking/p/10118774.html
Copyright © 2020-2023  润新知