今天在项目中需要根据不同客户定制不同的代码逻辑,于是我在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);
字节(Byte)是计量单位,表示数据量多少,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位。字符(Character)计算机中使用的字母、数字、字和符号,比如'A'、'B'、'$'、'&'等。一般在英文...
public class test { public static void main(String[] args) { &...
public class test { public static void main(String[] args) { &...
java限制1个方法同一时间只能被一个线程访问public synchronized void setOrderPay(){ }加上synchronized 修饰符即可...
(1).final 修饰符通常和 static 修饰符一起使用来创建类常量。(2).父类中的 final 方法可以被子类继承,但是不能被子类重写,声明 final 方法的主要目的是防止该方法的内容被修改。public class Member {  ...
在java中字符串属于对象,刚开始我就疑惑为什么int char等类型都是小写,结果String是大写,java太反人类,后来才知道String是对象。(1).java创建字符串String text = "net"; String tex...