Spring注解之@Autowired失败的解决方案

1.关于@Autowired

介绍

使用spring,在进行配置时,主要有两种方式,一是XML方式,二是Java config的方式。@Autowire就是配置注解的其中之一,它的功能就是为我们注入一个定义好的bean对象。

作用

首先从范围来说,它属于Spring容器配置的注解,于它同属容器的配置还有:@Required,@Primary,@Qualifier等。

@Autowired从字面的意思来说就是自动装配。自动装配本来的意思是指的一些工业上的用机器代替人工,自动将一些需要完成的组装任务或者其他的任务完成。在spring中,自动装配指的就是将Spring容器中的bean自动和我们需要这个bean的类组装在一起。

2.自动注入失败的分析

1)检查扫描路径

扫描路径是由@ComponentScan来指定的,默认为标注类当前包及当前包的子包。

也就是说,标注了@ComponentScan的启动类放在com.be.fallback包下面,只会扫描com.be.fallback包中的类,以及com.be.fallback.servlet、com.be.fallback.util等子包中的类,对于com.be.service等包中的类是不会扫描的。

注意事项一:很多人没有使用@ComponentScan,但是使用了@SpringBootApplication。@SpringBootApplication是通过内部封装@ComponentScan注解来实现实例扫描的,所以使用@SpringBootApplication也是一样的。

2)检查实例注册

检查想要使用@Autowired注解自动注入依赖的类,是否标注了用来注册给Spring Boot的注解。这些注解包括@Component,`@Service,@Repository,@Controller等。

3)检查启动类

启动类的@SpringBootApplication注解最好不要加其他的条件,可能会引起莫名的问题。

之前遇到@Autowired注入失败,就是因为下面的注解

@SpringBootApplication(exclude {DataSourceAutoConfiguration.class})
//其作用就是取消自动配置单数据源「注意这里提到的单数据源」。

3.如上述分析之后,还无法解决自动注入失败,则可选择下面的终极方案

1)用bean名称获取bean

封装一个工具类GetBean实现ApplicationContextAware

@Component
public class GetBean implements ApplicationContextAware {
    private static ApplicationContext applicationContext = null;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if (GetBean.applicationContext == null) {
            GetBean.applicationContext = applicationContext;
        }
    }
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    public static Object getBean(String name){
        return getApplicationContext().getBean(name);
    }

}

获取bean

private static RedisTemplate redisTemplate=(RedisTemplate) GetBean.getBean("redisTemplate");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值