Java对Springboot获取bean和判断bean是否存在的封装

今天在项目中需要根据不同客户定制不同的代码逻辑,于是我在Enum中定义客户代码和执行的bean,查阅资料了解到获取Bean和判断Bean是否存在的方式如下:

// 获取bean 
applicationContext.getBean(beanClass);
//判断bean
applicationContext.containsBean(beanClass);

但是我不想在代码中加一堆注解,例如下面的代码:

@Autowired
private ApplicationContext applicationContext;

于是封装一个bean的工具类:

/**
 * @author gaojiufeng
 * @Description
 * @date 2023-09-12
 */
@Component
public class SpringUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext = null;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if (SpringUtil.applicationContext == null) {
            SpringUtil.applicationContext = 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);
    }

    //通过name,以及Clazz返回指定的Bean
    public static <T> T getBean(String name, Class<T> clazz) {
        return getApplicationContext().getBean(name, clazz);
    }

    /**
     * 判断bean是否存在
     *
     * @param name-bean名称
     * @return 返回bean实体
     */
    public static boolean containsBean(String name) {
        return applicationContext.containsBean(name);
    }
}

ApplicationContextAware是一个接口,它可以用于在Spring Boot应用程序中获取并使用ApplicationContext对象。当一个类实现了ApplicationContextAware接口并实现了对应的方法时,Spring容器会自动将当前应用程序的ApplicationContext对象注入到该类中。

具体而言,ApplicationContextAware接口定义了一个方法:

void setApplicationContext(ApplicationContext applicationContext) throws BeansException;

当Spring容器实例化一个实现了ApplicationContextAware接口的bean时,会调用该bean的setApplicationContext()方法,并将ApplicationContext对象作为参数传递进去。

通过实现ApplicationContextAware接口并重写setApplicationContext()方法,我们可以在Spring容器初始化bean时获得应用程序的ApplicationContext实例,从而在需要的地方使用它。现在我们可以愉快的进行下面操作:

// 检查bean
String name = "gaojiufeng";
if (!SpringUtil.containsBean(name)) {
    throw new BusinessException("Bean不存在");
}    
// 获取bean
String name = "liyanru";
return (ILogService) SpringUtil.getBean(name);
访客
邮箱
网址

通用的占位符缩略图

人工智能机器人,扫码免费帮你完成工作


  • 自动写文案
  • 自动写小说
  • 马上扫码让Ai帮你完成工作
通用的占位符缩略图

人工智能机器人,扫码免费帮你完成工作

  • 自动写论文
  • 自动写软件
  • 我不是人,但是我比人更聪明,我是强大的Ai
Top