获取Spring IOC容器中bean对象
Spring常用的开发框架有SpringMVC和SpringBoot,很多时候后都是用@Component,@Service等注解类,或者在Spring配置文件中声明bean,使用的时候,在通过 @Resource或者 @Resource注解获取对象,但在某些情况下,无法使用自动注解获取对象,这个时候就需要从IOC容器中获取bean对象。
创建获取bean对象工具类 使用@Component注解
/**
* @author :xiao@case
* @date : 2019/7/19 15:19
* @description:获取Spring的IOC容器
* @version: 1.0$
*/
@Component
public class ApplicationContextConfig implements ApplicationContextAware {
private static ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
/**
*获取Spring的IOC容器ApplicationContext
* @author xiao@case
* @date 2019/7/30 9:59
*/
if (ApplicationContextConfig.getContext() == null) {
ApplicationContextConfig.setContext(applicationContext);
}
}
public static ApplicationContext getContext() {
return context;
}
public static void setContext(ApplicationContext context) {
ApplicationContextConfig.context = context;
}
/**
* 通过name获取 Bean.
*
* @author xiao@case
* @date 2019/7/19 15:22
*/
public static Object getBean(String name) {
return getContext().getBean(name);
}
/**
* 通过class获取Bean.
*
* @author xiao@case
* @date 2019/7/19 15:23
*/
public static <T> T getBean(Class<T> clazz) {
return getContext().getBean(clazz);
}
/**
* 通过name,以及Clazz返回指定的Bean
*
* @author xiao@case
* @date 2019/7/19 15:23
*/
public static <T> T getBean(String name, Class<T> clazz) {
return getContext().getBean(name, clazz);
}
}
如果使用SpringMVC框架,在配置文件中声明该工具类
<!--声明bean对象--> <bean id="applicationContextConfig" class="com.sydtech.itmc.config.ApplicationContextConfig"/>
如果是SpringBoot框架,有两种方式声明ApplicationContextConfig类到IOC容器中 1、定义ApplicationContextConfig类的包路径能被Springboot扫码到 2、使用@Bean注解的方式声明ApplicationContextConfig类 @Bean可理解为用spring的时候xml里面的bean标签
/**
* @description:Spring 容器配置
* @version: 1, 0$
*/
@Configuration
public class AppConfiguration {
@Bean
@Scope("prototype")
public ApplicationContextConfig applicationContextConfig() {
return new ApplicationContextConfig();
}
}
使用时直接调用ApplicationContextConfig 类中的静态方法getBean
//获取线程池对象 threadPoolTaskExecutor = ApplicationContextConfig.getBean(ThreadPoolTaskExecutor.class);
写在最后
人这一生也没有多少时间可以挥霍, 踏实一点,务实一点,专注一点 做自己想做的事, 生活都是小Case!
