在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