在SpringBoot项目中,使用@Controller等注解标注的类才能使用String提供的依赖注入,或者用@Component注解把类的创建交给Spring来管理也能使用。可是有时候需要直接在普通类里使用DAO层等提供的方法,但又不能让Spring管理这个类,这时候就需要事先保存ApplicationContext对象来提供Bean的调用
首先创建一个用来保存ApplicationContext对象的工具类
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.lang.NonNull;
@Slf4j
public class SpringUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext = null;
@Override
public void setApplicationContext(@NonNull ApplicationContext applicationContext) throws BeansException {
if (SpringUtil.applicationContext == null) {
SpringUtil.applicationContext = applicationContext;
}
log.info("---------------------------------------------------------------------");
log.info(" SpringUtil init applicationContext success");
log.info("---------------------------------------------------------------------");
}
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);
}
}
然后在Application启动类上方增加如下注解,Application启动时就会调用该工具类的setApplicationContext方法
@Import(SpringUtil.class)
现在就可以通过工具类直接在普通类里获取Spring管理的Bean了
SpringUtil.getBean(TestDAO.class);
网友评论