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

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

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

    其次执行顺序:

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

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

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

  • 相关阅读:
    读《万历十五年》和《一个广告人的自白》
    Windows Phone开发(26):启动器与选择器之MediaPlayerLauncher和SearchTask
    Windows Phone开发(24):启动器与选择器之发送短信
    Windows Phone开发(25):启动器与选择器之WebBrowserTask
    linux服务器,svn认证失败,配置问题,防火墙等等
    nginx 防火墙、权限问题
    本地phpstudy开发中apache可以用,nginx不可用,
    nginx https配置后无法访问,可能防火墙在捣鬼
    为了解决linux配置Nginx 只能关闭防火墙才能访问的问题
    搜集点shell资料 规格严格
  • 原文地址:https://www.cnblogs.com/emperorking/p/10118774.html
Copyright © 2011-2022 走看看