A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在Spring的全家桶中,使用@Autowired关键字无可避免,但是在异步中若是直接注入的话,会出现空指针异常,即注入不成功。那究竟该如何在异步中注入了。


import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringUtils implements ApplicationContextAware {

    private static ApplicationContext applCon;
        /**
        * 为空时,设置实例
        */
    @Override
    public void setApplicationContext(ApplicationContext applCon) throws BeansException {
        if (SpringUtils.applCon == null) {
            SpringUtils.applCon = applCon;
        }
    }

    /**
     * 获取applicationContext的实例applCon
     */
    public static ApplicationContext getApplicationContext() {
        return applCon;
    }

    /**
     * 通过name,以及Clazz获取指定的Bean
     */
    public static <T> T getBean(String name, Class<T> clazz) {
        return getApplicationContext().getBean(name, clazz);
    }

    /**
     * 通过clazz获取Bean(推荐使用这种)
     */
    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }

    /**
     * 通过name获取 Bean
     */
    public static Object getBean(String name) {
        return getApplicationContext().getBean(name);
    }
}

   如上面代码,通过实现Spring 的ApplicationContextAware接口,重写 setApplicationContext方法。且可以直接当做工具方法使用。


评分

参与人数 1黑马币 +1 收起 理由
vicolen + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马