spring boot 获取容器中的beanNames 以及 在普通类中获取容器中的实例

想要获取容器中的信息,首先需要拿到 ApplicationContext 实例,

获取 ApplicationContext 实例的方法一般有两种,

一是,启动时接收返回的ApplicationContext 实例,并保存到某个公共变量上。

二是,实现 ApplicationContextAware 接口。

 

方法一:

Spring Boot 入口类 MyApplication 

Java代码 

  1. @SpringBootApplication  
  2. @ServletComponentScan  
  3. public class MyApplication {  
  4.   
  5.     private static Logger log = LoggerFactory.getLogger(IotHubApplication.class);  
  6.     private static ApplicationContext applicationContext;  
  7.   
  8.     public static ApplicationContext getApplicationContext(){  
  9.         return applicationContext;  
  10.     }  
  11.   
  12.     public static void main(String[] args) {  
  13.         applicationContext = SpringApplication.run(IotHubApplication.class, args);  
  14.     }  
  15. }  

 

 

方法二:

自定义工具类 SpringUtil,实现 ApplicationContextAware 接口。

Java代码 

  1. import org.springframework.beans.BeansException;  
  2. import org.springframework.context.ApplicationContext;  
  3. import org.springframework.context.ApplicationContextAware;  
  4. import org.springframework.stereotype.Component;  
  5.   
  6. //加入@Component注解,让spring扫描到该bean  
  7. @Component  
  8. public class SpringUtil implements ApplicationContextAware {  
  9.       
  10.     private static ApplicationContext applicationContext;  
  11.   
  12.     @Override  
  13.     public void setApplicationContext(ApplicationContext applicationContext)  
  14.             throws BeansException {  
  15.         if (SpringUtil.applicationContext == null) {  
  16.             SpringUtil.applicationContext = applicationContext;  
  17.         }  
  18.     }  
  19.   
  20.     // 获取applicationContext  
  21.     public static ApplicationContext getApplicationContext() {  
  22.         return applicationContext;  
  23.     }  
  24.   
  25.      //通过name获取 Bean.  
  26.     public static Object getBean(String name){  
  27.         return getApplicationContext().getBean(name);  
  28.     }  
  29.   
  30.     //通过class获取Bean.  
  31.     public static <T> T getBean(Class<T> clazz){  
  32.         return getApplicationContext().getBean(clazz);  
  33.     }  
  34.   
  35.     //通过name,以及Clazz返回指定的Bean  
  36.     public static <T> T getBean(String name,Class<T> clazz){  
  37.         return getApplicationContext().getBean(name, clazz);  
  38.     }  
  39. }  

 

关于注解@Component的说明:

1@Component泛指各种组件,就是说当我们的类不属于 @Controller@Service@repository等的时候,我们就可以使用@Component来标注这个类。

2、被 @controller @service@repository @component 注解的类,都会纳入spring容器中进行管理 

 

关于ApplicationContextAware接口的说明:

Spring容器会检测容器中的所有Bean

如果发现某个Bean实现了ApplicationContextAware接口,

Spring容器会在创建该Bean之后,

自动调用该beansetApplicationContext(ApplicationContext applicationContext)方法,

调用该方法时,会将容器本身作为参数传给该方法。

 

 

SpringUtil使用示例

Java代码 

  1. // 容器中的bean总数  
  2. System.out.println(SpringUtil.getApplicationContext()  
  3.         .getBeanDefinitionCount());  
  4.   
  5. // 取得容器中的所有beanName,并打印包含keycloak关键词的  
  6. String beanNames[] = SpringUtil.getApplicationContext()  
  7.         .getBeanDefinitionNames();  
  8. for (String beanName : beanNames) {  
  9.     if (beanName.contains("keycloak") || beanName.contains("Keycloak")) {  
  10.         System.out.println(beanName);  
  11.     }  
  12. }  
  13. // 获取 HelloController 实例  
  14. HelloController helloController = SpringUtil.getApplicationContext()  
  15.         .getBean(HelloController.class);  
  16. System.out.println(helloController.hello("huangqiqing"null));  

 

上面示例输出结果:

515

keycloakClientRequestFactoryProd

keycloakClientRequestFactory

keycloakRestTemplate

KeycloakConfigResolver

keycloakAuthenticationProcessingFilterRegistrationBean

keycloakPreAuthActionsFilterRegistrationBean

keycloakAuthenticationProcessingFilter

keycloakPreAuthActionsFilter

keycloakAuthenticatedActionsFilter

keycloakSecurityContextRequestFilter

org.keycloak.adapters.springboot.KeycloakAutoConfiguration

getKeycloakContainerCustomizer

tomcatKeycloakContextCustomizer

keycloak-org.keycloak.adapters.springboot.KeycloakSpringBootProperties

Hello World huangqiqing

 

 

 

转载于:https://my.oschina.net/u/4058864/blog/2995532

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值