• 线程当中注入Service的时候,程序一直在报NullPointerException


    启动线程的时候注入Service的时候失败,这是因为在线程中为了线程安全,是防注入的
    public class WebSiteHtmlUnitThread implements Runnable {
        
        @Autowired
        private RefereeProcessor refereeProcessor;   //这个时候启动线程的时候refereeProcessor是一个null,没有注入进去。
    @Override public void run() {} }

    解决方案:

    package com.study.anti_fraud.antifaud_reptile_service.untils;
    
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * 线程当中注入Service注入不成功的时候,才有了此方法
     */
    @Configuration
    public class SpringContextUtil implements ApplicationContextAware {
    
        private static ApplicationContext applicationContext;
    
        /**
         * 服务器启动,Spring容器初始化时,当加载了当前类为bean组件后,
         * 将会调用下面方法注入ApplicationContext实例
         */
        @Override
        public void setApplicationContext(ApplicationContext arg0) throws BeansException {
            System.out.println("初始化了");
            SpringContextUtil.applicationContext = arg0;
        }
    
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
    
        /**
         * 用bean组件的name来获取bean
         *
         * @param beanName
         * @return
         */
        @SuppressWarnings("unchecked")
        public static <T> T getBean(String beanName) {
            return (T) applicationContext.getBean(beanName);
        }
    
        /**
         * 用类来获取bean
         *
         * @param c
         * @return
         */
        public static <T> T getBean(Class<T> c) {
            return (T) applicationContext.getBean(c);
        }
    }

    如果SpringContextUtil类所在的包为com.study.anti_fraud,则只会扫描com.study.anti_fraud包及其子包内扫描。

    而我刚开始将SpringContextUtil类放入到公共的common包当中了,所以一直包空指针。

    那怎么解决呢?

    那么需要在启动类中 配置注解@ComponentScan(basePackages={“com.study.common”}),


    如果就在当前包下面则就不需要写这段内容了

  • 相关阅读:
    oracle 编译无效对象
    nginx配置监控
    Docker底层技术
    KVM入门
    maven 忽略checkstyle
    Java 使用 UnixSocket 调用 Docker API
    unix-socket-implementation-for-java
    NVIDIA Physix Unity3D
    Mobile Prototype Dev Res Collection(Unity原型开发资源储备)
    Unity抗锯齿
  • 原文地址:https://www.cnblogs.com/it1042290135/p/16081978.html
Copyright © 2020-2023  润新知