zoukankan      html  css  js  c++  java
  • 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,搞定。

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

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

    其次执行顺序:

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

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

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

  • 相关阅读:
    Common Lisp 参数传递的几种形式
    EF架构~基于EF数据层的实现
    标准架构~业务层到底是否应该关注数据持久化的方式
    Redis学习笔记~Redis主从服务器,读写分离
    Redis学习笔记~是时候为Redis实现一个仓储了,RedisRepository来了
    MVVM架构~knockoutjs系列之数组的$index和$data
    【Oracle】-【sqlplus / as sysdba登录报错问题】-新用户使用sqlplus / as sysdba登录报错
    Android---App Widget(一)
    Mit 分布式系统导论,Distributed Systems ,lab1 -lab6 总结,实验一到实验六总结
    GDAL切割重采样遥感图像
  • 原文地址:https://www.cnblogs.com/emperorking/p/10118774.html
Copyright © 2011-2022 走看看