import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; /** * 手动注入bean */ @Component public class ApplicationContextUtil implements ApplicationContextAware { @Autowired private static ApplicationContext context; /** * 获取ApplicationContext */ public static ApplicationContext getApplicationContext() { return context; } /** * 插入ApplicationContext */ @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { context = applicationContext; } /** * 通过name获取 Bean */ public static Object getBean(String name) { return getApplicationContext().getBean(name); } /** * 通过class获取Bean. */ public static <T> T getBean(Class<T> clazz) { return getApplicationContext().getBean(clazz); } /** * 通过name,以及Clazz返回指定的Bean */ public static <T> T getBean(String name, Class<T> clazz) { return getApplicationContext().getBean(name, clazz); } }
使用
在new的对象中实现
private final RatePaymentService ratePaymentService = ApplicationContextUtil.getBean(RatePaymentService.class);
等价于