问题引入:
有时候我们需要在一个类中使用已经被注入spring容器的类(比如被包扫描的mapper接口,或者加了@Component注解的类),但一个类要想使用spring容器的对象,一般需要声明对象,然后用@AutoWired注解,而这又要求当前类得被spring容器管理(被包扫描并且使用了@Component注解), 但我只是想用一个接口,我不想让当前类存入spring容器中,所以就有了标题的需求.
SpringContainerUtil封装代码:
@Component
public class SpringContainerUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext1) throws BeansException {
applicationContext =applicationContext1;
}
public static <T> T getBean(Class<T> clazz){
return applicationContext.getBean(clazz);
}
public static <T> T getBean(String name, Class<T> clazz){
return applicationContext.getBean(name,clazz);
}
public static <T> T getBean(String name){
return (T) applicationContext.getBean(name);
}
}
当一个类实现了ApplicationContextAware之后,这个类就可以方便获得ApplicationContext中的所有bean,这个类可以直接获取spring配置文件中,所有有引用到的bean对象。
如何使用:
替换掉了之前的: