SpringBoot解决@Component无法注入其他Bean的问题

 更新时间:2021年08月31日 14:38:27   作者:954L  
这篇文章主要介绍了SpringBoot解决@Component无法注入其他Bean的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

SpringBoot @Component无法注入其他Bean

一、现象

在SpringBoot新new一个普通类,习惯性添加@Component让Spring扫描。

在@Component修饰的类里注入了其他Bean,运行时提示注入的为null

但这个Bean可以在控制层被引入,在普通类就不行。

二、解决

找了些资料,最后也没解决注入的问题。

最后的方案就是去掉@Component注解,在new这个普通类时从Spring上下文实例中取出这个Bean赋给成员变量使用。

弊端:这个类非单例

三、代码如下

ApplicationContextProvider

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component; 
@Component
public class ApplicationContextProvider implements ApplicationContextAware {
 
    /**
     * 上下文对象实例
     */
    private static ApplicationContext applicationContext;
 
    @SuppressWarnings("static-access")
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }
 
    /**
     * 获取applicationContext
     *
     * @return
     */
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }
 
    /**
     * 通过name获取 Bean.
     *
     * @param name
     * @return
     */
    public static Object getBean(String name) {
        return getApplicationContext().getBean(name);
    }
 
    /**
     * 通过class获取Bean.
     *
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }
 
    /**
     * 通过name,以及Clazz返回指定的Bean
     *
     * @param name
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> T getBean(String name, Class<T> clazz) {
        return getApplicationContext().getBean(name, clazz);
    } 
}

IdentityCheckUtil

import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.http.FullHttpRequest;
import org.apache.log4j.Logger; 
public class IdentityCheckUtil { 
    private Logger logger = Logger.getLogger(IdentityCheckUtil.class); 
    private UserMapper userMapper; 
    public IdentityCheckUtil() {
        this.userMapper = ApplicationContextProvider.getBean(UserMapper.class);
    } 
    public boolean allowedPass(ChannelHandlerContext ctx, FullHttpRequest fullHttpRequest) {
        System.out.println(userMapper);
    }
}

@Component注解自动注入失效问题

使用@Component声明 进行自动注入失效

在这里插入图片描述

@Component,在默认情况下只能扫描与控制器在同一个包下以及其子包下的@Component注解,以及能将指定注解的类自动注册为Bean的@Service@Controller和@ Repository,将接口与对应实现类放在了与控制器所在包的同一级目录下,这样的注解自然是无法被识别的。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mybatis-plus如何禁用一级缓存的方法

    mybatis-plus如何禁用一级缓存的方法

    这篇文章主要介绍了mybatis-plus如何禁用一级缓存的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • SpringBoot中的多个事务管理详解

    SpringBoot中的多个事务管理详解

    这篇文章主要介绍了SpringBoot中的多个事务管理详解,事务管理是一种组织和协调各种活动和资源的方法,以实现特定目标,它涉及规划、执行和监控各种任务,以确保项目或组织的顺利运行,需要的朋友可以参考下
    2023-10-10
  • Java并发工具Fork/Join原理

    Java并发工具Fork/Join原理

    这篇文章主要为大家介绍了Java并发工具Fork/Join原理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Java基于递归解决全排列问题算法示例

    Java基于递归解决全排列问题算法示例

    这篇文章主要介绍了Java基于递归解决全排列问题算法,结合实例形式分析了Java使用递归算法解决全排列问题的原理与具体实现技巧,需要的朋友可以参考下
    2017-11-11
  • 详解Spring中接口的bean是如何注入的

    详解Spring中接口的bean是如何注入的

    这篇文章主要介绍了详解Spring中接口的bean是如何注入的的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-06-06
  • Java this关键字的引用详解

    Java this关键字的引用详解

    每个类中都有一个本类的this引用,类似:类名 this;实例对象时,this引用指向对象本身,其最主要的作用是让类中的方法可以访问本类中的另外一个方法或属性,因为调用一个方法或属性(非类方法/属性)必须要有实例
    2022-03-03
  • Mybatis查找返回Map,List集合类型的数据方式

    Mybatis查找返回Map,List集合类型的数据方式

    这篇文章主要介绍了Mybatis查找返回Map,List集合类型的数据方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java excel数据导入mysql的实现示例详解

    Java excel数据导入mysql的实现示例详解

    今天教大家如何使用Java将excel数据导入MySQL,文中有非常详细的代码示例,对正在学习java的小伙伴呢很有帮助,需要的朋友可以参考下
    2022-08-08
  • Java基础高级综合练习题扑克牌的创建

    Java基础高级综合练习题扑克牌的创建

    今天小编就为大家分享一篇关于Java基础高级综合练习题扑克牌的创建,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • java.lang.Instrument 代理Agent使用详细介绍

    java.lang.Instrument 代理Agent使用详细介绍

    这篇文章主要介绍了java.lang.Instrument 代理Agent使用详细介绍的相关资料,附有实例代码,帮助大家学习参考,需要的朋友可以参考下
    2016-11-11

最新评论