zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    [USACO08MAR]土地征用Land Acquisition
    树链剖分
    [AHOI2008]紧急集合 / 聚会
    P1852 [国家集训队]跳跳棋
    Ant Trip(欧拉回路+并查集)
    单词游戏
    POJ3694 Network
    C++ STL小总结
    2-Sat专题
    6大名家带你穿越大半个中国去深思
  • 原文地址:https://www.cnblogs.com/wjlwo2ni/p/10615618.html
Copyright © 2011-2022 走看看