Java 普通类实现spring bean的自定装载

来源:互联网 发布:衣服尾货处理知乎 编辑:程序博客网 时间:2024/06/07 01:03

工作需要做一个定时器,但无法实现spring bean的装载,总是报空指针。
写一个SpringContextUtils类实现ApplicationContextAware接口实现。Spring 提供了ApplicationContextAware类,通过它可以获取所有bean上下文。

import java.util.Map;import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;/** * 获取ApplicationContext和Object的工具类 * @author yzl * */@SuppressWarnings({ "rawtypes", "unchecked" })public class SpringContextUtils implements ApplicationContextAware {    private static ApplicationContext applicationContext;    public void setApplicationContext(ApplicationContext arg0)            throws BeansException {        applicationContext = arg0;    }    /**     * 获取applicationContext对象     * @return     */    public static ApplicationContext getApplicationContext(){        return applicationContext;    }    /**     * 根据bean的id来查找对象     * @param id     * @return     */    public static Object getBeanById(String id){        return applicationContext.getBean(id);    }    /**     * 根据bean的class来查找对象     * @param c     * @return     */    public static Object getBeanByClass(Class c){        return applicationContext.getBean(c);    }    /**     * 根据bean的class来查找所有的对象(包括子类)     * @param c     * @return     */    public static Map getBeansByClass(Class c){        return applicationContext.getBeansOfType(c);    }}

在spring的xml文件中配置

<!--Spring中bean获取的工具类-->    <bean id="springContextUtils" class="com.travelsky.szky.cts.task.SpringContextUtils" />

然后手动装载

CounterInfoDao counterInfoDao = (CounterInfoDao)SpringContextUtils.getBean("counterInfoDao");

非web项目可以用ClassPathXmlApplicationContext模拟xml文件的加载

new ClassPathXmlApplicationContext("spring-mybatis.xml");