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);

 

posted on 2019-03-28 16:00  江清澜静  阅读(1183)  评论(0编辑  收藏  举报

导航