• springboot 项目中在普通类中调用dao层的mapper 出现空指针异常


    项目中我遇到同样的问题 特记载一下

    有两种方式

    一、

    该类使用@Component注解

    添加一个本类类型的静态字段

    创建一个初始化方法,贴上@PostConstruct 标签,用于注入bean

    创建方法调用mapper或service接口

    最后直接在普通类中调用即可

    @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

     被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法。被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。

    个人理解就是mapper 装载失败 重点init()方法中转了一次

    @Component
    public class TestUtil {
    
        @Autowired
        private DoctorInformationMapper doctorInformationMapper;
    
    
        public static TestUtil testUtil;
    
        @PostConstruct
        public void init() {
            testUtil = this;
            testUtil.doctorInformationMapper = this.doctorInformationMapper;
        }
    
        //调用
        public static int getOpenId() {
            int count = testUtil.doctorInformationMapper.count("12313");
            return count;
        }
        
    }

    二。通过spring 容器去拿

    2.1首先打印出Spring容器所有的Bean名称

    @Component
    public class ApplicationContextBean implements ApplicationContextAware, InitializingBean {
    
        public static ApplicationContext applicationContext;
    
        /**
         * 获取 ApplicationContext
         *
         * @param applicationContext
         * @throws BeansException
         */
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            ApplicationContextBean.applicationContext = applicationContext;
        }
    
        /**
         * 打印IOC容器中所有的Bean名称
         *
         * @throws Exception
         */
        @Override
        public void afterPropertiesSet() throws Exception {
            String[] names = applicationContext.getBeanDefinitionNames();
            for (String name : names) {
                System.out.println(">>>>>>" + name);
            }
           System.out.println("------
    Bean 总计:" + applicationContext.getBeanDefinitionCount());
        }
    
    }

    不用调用测试,项目启动就会在后台打印出来

    2.2开始写获取bean工具类

    @Component
    public class SpringUtil implements ApplicationContextAware {
        private static ApplicationContext applicationContext = null;
    
        public SpringUtil() {
        }
    
        public void setApplicationContext(ApplicationContext arg0) throws BeansException {
            if (applicationContext == null) {
                applicationContext = arg0;
            }
    
        }
    
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
    
        public static void setAppCtx(ApplicationContext webAppCtx) {
            if (webAppCtx != null) {
                applicationContext = webAppCtx;
            }
        }
    
        /**
         * 拿到ApplicationContext对象实例后就可以手动获取Bean的注入实例对象
         */
        public static <T> T getBean(Class<T> clazz) {
            return getApplicationContext().getBean(clazz);
        }
    
        public static <T> T getBean(String name, Class<T> clazz) throws ClassNotFoundException {
            return getApplicationContext().getBean(name, clazz);
        }
    
        public static final Object getBean(String beanName) {
            return getApplicationContext().getBean(beanName);
        }
    
        public static final Object getBean(String beanName, String className) throws ClassNotFoundException {
            Class clz = Class.forName(className);
            return getApplicationContext().getBean(beanName, clz.getClass());
        }
    
        public static boolean containsBean(String name) {
            return getApplicationContext().containsBean(name);
        }
    
        public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
            return getApplicationContext().isSingleton(name);
        }
    
        public static Class<?> getType(String name) throws NoSuchBeanDefinitionException {
            return getApplicationContext().getType(name);
        }
    
        public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {
            return getApplicationContext().getAliases(name);
        }
      
    //测试 public static String getCharId(String chatId) { ChatListAssociationMapper associationMapper = (ChatListAssociationMapper) SpringUtil.getBean("chatListAssociationMapper");//这个参数是spring容器里存在的,名字最好复制,大小写要一致,不然会失败 return associationMapper.chatId(chatId); }
    }

    注意以上的两种方法都不能在main方法调用,会报空指针异常

  • 相关阅读:
    2015年值得关注的8款跨平台开发工具(界面类)
    2015年最值得关注的8款用户界面新品
    2015年最受欢迎的8个用户界面组件
    DevExpress v15.2.4帮助文档下载(全)
    DevExpress .NET界面开发示例大全
    DevExpress免费线上公开课17日开课
    DevExpress 2015.2发布 看看有哪些更新
    图文详细解说DevExpress 2015新版亮点【附文档下载】
    myeclipse 2015 CI 16发布【附下载】
    swift 第三天 控制流
  • 原文地址:https://www.cnblogs.com/nongzihong/p/11350308.html
Copyright © 2020-2023  润新知