当前位置:首页 > JAVA > 正文内容

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

高老师2年前 (2023-09-12)JAVA443

今天在项目中需要根据不同客户定制不同的代码逻辑,于是我在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);

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/468.html

分享给朋友:

“Java对Springboot获取bean和判断bean是否存在的封装” 的相关文章

java编译编码问题,java编译执行时编码问题

java编译编码问题,java编译执行时编码问题

public class test {     public static void main(String[] args) {     &...

java增强型for循环

java增强型for循环

Java5 引入了一种主要用于数组的增强型 for 循环,类似js中的for inpublic class Member {     public static void main(String[]&...

java Character 类,java判断字符是否是一个字母,java判断字符是否是一个数字,java判断字符是否是一个空白,java判断字符是否是小写字母,java判断字符是否是大写字母,java转换字符为大写,java转换字符为小写

java Character 类,java判断字符是否是一个字母,java判断字符是否是一个数字,java判断字符是否是一个空白,java判断字符是否是小写字母,java判断字符是否是大写字母,java转换字符为大写,java转换字符为小写

java判断字符是否是一个字母System.out.println(Character.isLetter('a'));java判断字符是否是一个数字System.out.println(Character.isDigit('0'));java判断字符是否是一个空白Sy...

java stringBuffer,java stringBuffer反转字符串,java stringBuffer delete删除字符/移除字符,java stringBuffer在指定位置插入字符串,java stringBuffer替换指定位置的字符串,java stringBuffer获取指定索引的值

java stringBuffer,java stringBuffer反转字符串,java stringBuffer delete删除字符/移除字符,java stringBuffer在指定位置插入字符串,java stringBuffer替换指定位置的字符串,java stringBuffer获取指定索引的值

java stringBuffer(1).stringBuffer和stringBuilder区别stringBuffer是线程安全的,stringBuilder速度更快(2).简单的stringBuffer例子StringBuffer sBuffer = new&nb...

java数组,java创建数组,java创建数组并赋值,java数组元素个数,java foreach 循环数组,java数组排序

java数组,java创建数组,java创建数组并赋值,java数组元素个数,java foreach 循环数组,java数组排序

(1).创建数组double[] myList = new double[size];  //推荐创建方式 double myList[] = new double[size];  ...

java睡眠方法,java睡眠函数,java睡眠时间,java睡眠一分钟,java睡眠五秒钟

java睡眠方法,java睡眠函数,java睡眠时间,java睡眠一分钟,java睡眠五秒钟

(1).java睡眠函数Thread.sleep(时间);  //单位为毫秒(2).java睡眠函数例子Date dNow = new Date(); SimpleDateFormat ft = new&nbs...