在一些场景中,某些类没有交给ioc容器托管,类里面需要注入bean时,用@Autowire、@Resource会失效,这时就得用非注解方式注入bean了。代码如下:
@Component
public class GetBean implements ApplicationContextAware {
private GetBean() {
}
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) {
GetBean.applicationContext = applicationContext;
}
public static <T> T getBean(Class<T> clazz) {
return applicationContext != null ? applicationContext.getBean(clazz) : null;
}
}
使用方式如下,其中DataClient是一个接口,用于做远程调用:
protected DataClient dataClient = GetBean.getBean(DataClient.class);