SpringUtils.java 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package com.poyee.util;
  2. import org.apache.commons.lang3.StringUtils;
  3. import org.springframework.aop.framework.AopContext;
  4. import org.springframework.beans.BeansException;
  5. import org.springframework.beans.factory.NoSuchBeanDefinitionException;
  6. import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
  7. import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
  8. import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
  9. import org.springframework.context.ApplicationContext;
  10. import org.springframework.context.ApplicationContextAware;
  11. import org.springframework.stereotype.Component;
  12. /**
  13. * spring工具类 方便在非spring管理环境中获取bean
  14. *
  15. * @author zheng
  16. */
  17. @Component
  18. public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware {
  19. /**
  20. * Spring应用上下文环境
  21. */
  22. private static ConfigurableListableBeanFactory beanFactory;
  23. private static ApplicationContext applicationContext;
  24. /**
  25. * 获取对象
  26. *
  27. * @param name
  28. * @return Object 一个以所给名字注册的bean的实例
  29. * @throws BeansException
  30. */
  31. @SuppressWarnings("unchecked")
  32. public static <T> T getBean(String name) throws BeansException {
  33. return (T) beanFactory.getBean(name);
  34. }
  35. /**
  36. * 获取类型为requiredType的对象
  37. *
  38. * @param clz
  39. * @return
  40. * @throws BeansException
  41. */
  42. public static <T> T getBean(Class<T> clz) throws BeansException {
  43. T result = beanFactory.getBean(clz);
  44. return result;
  45. }
  46. /**
  47. * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
  48. *
  49. * @param name
  50. * @return boolean
  51. */
  52. public static boolean containsBean(String name) {
  53. return beanFactory.containsBean(name);
  54. }
  55. /**
  56. * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
  57. *
  58. * @param name
  59. * @return boolean
  60. * @throws NoSuchBeanDefinitionException
  61. */
  62. public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
  63. return beanFactory.isSingleton(name);
  64. }
  65. /**
  66. * @param name
  67. * @return Class 注册对象的类型
  68. * @throws NoSuchBeanDefinitionException
  69. */
  70. public static Class<?> getType(String name) throws NoSuchBeanDefinitionException {
  71. return beanFactory.getType(name);
  72. }
  73. /**
  74. * 如果给定的bean名字在bean定义中有别名,则返回这些别名
  75. *
  76. * @param name
  77. * @return
  78. * @throws NoSuchBeanDefinitionException
  79. */
  80. public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {
  81. return beanFactory.getAliases(name);
  82. }
  83. /**
  84. * 获取aop代理对象
  85. *
  86. * @param invoker
  87. * @return
  88. */
  89. @SuppressWarnings("unchecked")
  90. public static <T> T getAopProxy(T invoker) {
  91. return (T) AopContext.currentProxy();
  92. }
  93. /**
  94. * 获取当前的环境配置,无配置返回null
  95. *
  96. * @return 当前的环境配置
  97. */
  98. public static String[] getActiveProfiles() {
  99. return applicationContext.getEnvironment().getActiveProfiles();
  100. }
  101. /**
  102. * 获取当前的环境配置,当有多个环境配置时,只获取第一个
  103. *
  104. * @return 当前的环境配置
  105. */
  106. public static String getActiveProfile() {
  107. final String[] activeProfiles = getActiveProfiles();
  108. return StringUtils.isNoneBlank(activeProfiles) ? activeProfiles[0] : null;
  109. }
  110. public static AutowireCapableBeanFactory getAutowireCapableBeanFactory() {
  111. return applicationContext.getAutowireCapableBeanFactory();
  112. }
  113. @Override
  114. public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
  115. SpringUtils.beanFactory = beanFactory;
  116. }
  117. @Override
  118. public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
  119. SpringUtils.applicationContext = applicationContext;
  120. }
  121. }