场景
在一些开发过程中,@Component
,@Configuration
类中使用@Autowired
、@Resource
无法注入需要Bean的情况下,我们需要通过手动方式实现Bean的注入,可以通过实现ApplicationContextAware
达到预期目标
代码实现
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class SpringContextUtils implements ApplicationContextAware {
public static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
SpringContextUtils.applicationContext = applicationContext;
}
public static Object getBean(String name) {
return applicationContext.getBean(name);
}
public static <T> T getBean(String name, Class<T> requiredType) {
return applicationContext.getBean(name, requiredType);
}
public static boolean containsBean(String name) {
return applicationContext.containsBean(name);
}
public static boolean isSingleton(String name) {
return applicationContext.isSingleton(name);
}
public static Class<? extends Object> getType(String name) {
return applicationContext.getType(name);
}
}
使用
避免Bean加载顺序导致NullPointException,建议在需要引用工具类的类上添加注解@DependsOn("springContextUtils")
注入Bean
Bean bean= (Bean)SpringContextUtils.getBean("beanName")
评论区