Spring boot针对使用@Autowired和@Resource注入失败的解决方案

场景:一个月黑风高的晚上,我立下flag,做完这个功能就睡觉,结果就一直卡在了Service实现类中注入的Repository为空的问题,因为没有使用xml文件配置,导致也不知道从何下手,在网上查找的方法也不管用,比如检查注解是否完全、,我们下面直接来解决

一般来说,你要保证注入的对象在Spring的管理池中,怎么确定呢?

一般在对应类上加上注解即可

有关Service的实现类:@Service

有关Controller的实现类:@Controller

有关Repository的接口或类:@Repository

还有一些@Component、@Configuration、@Bean等一些注解,具体的可以将这些类交给Spring来帮我们管理

我们先来看看问题
Spring boot针对使用@Autowired和@Resource注入失败的解决方案_第1张图片
注入的对象为null???不能理解
在这里插入图片描述

但是我这些注解都配置好了啊,那怎么办呢?

最后我的解决方案就是在配置类文件夹中新建一个类ApplicationContextAwareGetBean.class来实现ApplicationContextAware接口,重写接口中的方法

直接上代码

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class ApplicationContextAwareGetBean implements ApplicationContextAware {
    private static ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.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);
    }
}

我最终就通过这个配置类来获取我们想要的bean对象

然后在想要注入的类中直接调用即可
Spring boot针对使用@Autowired和@Resource注入失败的解决方案_第2张图片

你可能感兴趣的:(Spring)