转载

解决SpringBoot/Spring在异步中无法注入实例问题

在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方法。且可以直接当做工具方法使用。

想要更多资料,撩小娜哦:gzitcast

原文  https://segmentfault.com/a/1190000020432350
正文到此结束
Loading...