spring 普通类注入为null,通过自定义SpringUtils解决
1 package com.jathams.spring; 2 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 //定义为final类 8 @Component 9 public final class SpringUtils implements BeanFactoryPostProcessor { 10 //静态 11 private static ConfigurableListableBeanFactory beanFactory; // Spring应用上下文环境 12 13 @Override 14 public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) 15 throws BeansException { 16 SpringUtils.beanFactory = beanFactory; 17 } 18 19 /** 20 * 获取对象 21 * 22 * @param name 23 * @return Object 一个以所给名字注册的bean的实例 24 * @throws org.springframework.beans.BeansException 25 * 26 */ 27 @SuppressWarnings("unchecked") 28 public static <T> T getBean(String name) throws BeansException { 29 return (T) beanFactory.getBean(name); 30 } 31 32 /** 33 * 获取类型为requiredType的对象 34 * 35 * @param clz 36 * @return 37 * @throws org.springframework.beans.BeansException 38 * 39 */ 40 public static <T> T getBean(Class<T> clz) throws BeansException { 41 @SuppressWarnings("unchecked") 42 T result = (T) beanFactory.getBean(clz); 43 return result; 44 } 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 /** 57 * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 58 * 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException) 59 * 60 * @param name 61 * @return boolean 62 * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException 63 * 64 */ 65 public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException { 66 return beanFactory.isSingleton(name); 67 } 68 69 /** 70 * @param name 71 * @return Class 注册对象的类型 72 * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException 73 * 74 */ 75 public static Class<?> getType(String name) throws NoSuchBeanDefinitionException { 76 return beanFactory.getType(name); 77 } 78 79 /** 80 * 如果给定的bean名字在bean定义中有别名,则返回这些别名 81 * 82 * @param name 83 * @return 84 * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException 85 * 86 */ 87 public static String[] getAliases(String name) throws NoSuchBeanDefinitionException { 88 return beanFactory.getAliases(name); 89 } 90 91 }
使用
1 ProductionMonthSettleService monthSettleService = SpringUtils.getBean(ProductionMonthSettleService.class);