springboot通过名称获取bean(applicationContext)

来源:互联网 发布:论坛软件有哪些 编辑:程序博客网 时间:2024/06/10 03:54

IOC容器有beanFactory 和ApplicationContext.通常建议使用后者,因为它包含了前者的功能。Spring的核心是ApplicationContext.它负责管理 beans 的完整生命周期。我们可以从applicationContext里通过bean名称获取安装的bean.进行某种操作。不能直接使用applicationContext.而需要借助applicationContextAware.具体方法如下:

@Componentpublic class ApplicationContextHelper implements ApplicationContextAware {    private static ApplicationContext applicationContext;    public ApplicationContextHelper() {    }
    @Override    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {        ApplicationContextHelper.applicationContext = applicationContext;    }    public static Object getBean(String beanName) {        return applicationContext != null?applicationContext.getBean(beanName):null;    }}

声明一个

ApplicationContextHelper组件,名字随意。它实现了ApplicationContextAware接口。并重写
setApplicationContext方法。在该组件里可以通过名字获取某个bean.
使用:
@SpringBootApplicationpublic class Application {   public static void main(String[] args) {      System.setProperty("user.timezone","Asia/Shanghai");      TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));      SpringApplication.run(Application.class, args);   }   @Bean(name="restTemplate")   public RestTemplate restTemplate() {      RestTemplate restTemplate = new RestTemplate();      restTemplate.getMessageConverters()            .add(0, new StringHttpMessageConverter( Charsets.UTF_8));      return restTemplate;   }}

public class TestTask implements Callable<String> {    private RestTemplate restTemplate = (RestTemplate) ApplicationContextHelper.getBean( "restTemplate" );
    public doSomeThing(){
    }
}此外,不只可以通过名称,还可以通过属于某一类Class<T>,来获取类,例如,获取所有的requestHandler及其url映射,可以通过如下语句:
RequestMappingHandlerMapping handlerMapping = applicationContext.getBean(RequestMappingHandlerMapping.class);

关于RequestMappingHandlerMapping类,请参考:http://www.cnblogs.com/leftthen/p/5208404.html


原创粉丝点击