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,搞定。

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

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

    其次执行顺序:

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

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

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

  • 相关阅读:
    Lambda Expression in C#
    DirectorySearcher LDAP
    摘录 LDAP
    The return types for the following stored procedures could not be detected
    无法调试存储过程,无法启动T-SQL调试
    根据窗口句柄显示窗体
    还原数据库时提示空间不足
    xml格式发送
    ../ 上一级目录
    匿名函数 invoke
  • 原文地址:https://www.cnblogs.com/emperorking/p/10118774.html
Copyright © 2011-2022 走看看