1、解决方法
我们定义一个上下文类,去使用类去实现
ApplicationContextAware
接口,重写
setApplicationContext
方法,在Spring
将Bean
全部扫描完成后,我们获取到ApplicationContext
数据,放到静态属性中
/**
* @Author: js
* @Date: 2024/8/29
*/
@Component
public class SpringBeanContext implements ApplicationContextAware {
@Getter
private static ApplicationContext context;
/**
* spring容器启动过程中,将所有的bean加载在本类的context属性,然后外界可以获取
*/
@Override
public void setApplicationContext(@NonNull ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
/**
* 根据beanName获取bean
*
* @param beanName bean名称
* @return bean对象
*/
public Object getBean(String beanName) {
return context.getBean(beanName);
}
/**
* 根据beanName和类型获取bean
*
* @param beanName bean名称
* @param clazz bean类型
* @param <T> bean类型
* @return bean对象
*/
public <T> T getBean(String beanName, Class<T> clazz) {
return context.getBean(beanName, clazz);
}
/**
* 根据类型获取bean
*
* @param clazz bean类型
* @param <T> bean类型
* @return bean对象
*/
public <T> T getBean(Class<T> clazz) {
return context.getBean(clazz);
}
}