spring获取bean实例

本文介绍了一种在非Spring组件中获取SpringBean的方法,通过自定义SpringContextUtil工具类实现跨组件资源共享,使得如quartz任务等外部任务可以方便地调用Spring管理的服务。

在web项目中获取springbean,有时候我们需要在非spring组件中获取springbean,我们如果希望在我们的项目中任何位置都能拿到同一个ApplicationContext来获取IOC容器中的资源,就要让Spring将上下文环境填充到我们能获取的地方

最简单的方案就是自己写一个SpringContextUtil来获取。

代码如下:

public class SpringContextUtil implements ApplicationContextAware {
    private static final Logger logger = LoggerFactory.getLogger(SpringContextUtil.class);

    private static ApplicationContext context = null;

    /*
     * @Title: setApplicationContext
     * @Description: spring获取bean工具类
     * @param applicationContext
     * @throws BeansException
     * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
     */
    @Override
    public void setApplicationContext(ApplicationContext applicationContext)
            throws BeansException {
        SpringContextUtil.context = applicationContext;
    }
    @SuppressWarnings("unchecked")
    public static <T> T getBean(String beanName) {
        return (T) SpringContextUtil.context.getBean(beanName);
    }
    public static String getMessage(String key) {
        return context.getMessage(key, null, Locale.getDefault());
    }
}

有一个quartz任务需要执行,它是在spring组件之外的,代码如下:

public class VisitorWriteTask extends QuartzJobBean {

    private static final Logger logger = LoggerFactory.getLogger(VisitorWriteTask.class);


    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        this.work();
    }

    public void work() {
        try {
            logger.info("VisitorWriteTask is start");
            VisitorService visitorService = SpringContextUtil.getBean("visitorService");
            visitorService.writeVisitor();
            logger.info("VisitorWriteTask is end");
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
    }
}

这样通过直接SpringContextUtil.getBean("visitorService")就可以获得visitorService这个实例bean。

转载于:https://my.oschina.net/110NotFound/blog/815786

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值