SpringUtils.java 3.0 KB

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