zoukankan      html  css  js  c++  java
  • java Spring boot使用spring反射

    spring 反射

    当你配置各种各样的bean时,是以配置文件的形式配置的,你需要用到哪些bean就配哪些,spring容器就会根据你的需求去动态加载,你的程序就能健壮地运行。

    1.可以通过类名去实例化这个类

    applicationContext.getBean(name)
    2.通过类型获取类
    applicationContext.getBeansOfType(clazz);

    首先要拿到spring容器,类里实现ApplicationContextAware接口能获取applicationContext

    可以把获取bean的方法写到一个工具类里实现ApplicationContextAware,把applicationContext定义成常量方便调用
     1  private static ApplicationContext applicationContext = null;
     2 
     3     @Override
     4     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
     5         if (SpringUtil.applicationContext == null) {
     6             SpringUtil.applicationContext = applicationContext;
     7         }
     8     }
     9 
    10     public static ApplicationContext getApplicationContext() {
    11         return applicationContext;
    12     }
    13 
    14     public static <T> Map<String, T> getBeanOfType(Class<T> clazz) {
    15         return getApplicationContext().getBeansOfType(clazz);
    16     }
    17 
    18     public static Object getBean(String name) {
    19         return getApplicationContext().getBean(name);
    20     }
    21 
    22     public static <T> T getBean(Class<T> clazz) {
    23         return getApplicationContext().getBean(clazz);
    24     }
    25 
    26     public static <T> T getBean(String name, Class<T> clazz) {
    27         return getApplicationContext().getBean(name, clazz);
    28     }
    在spring boot框架中省略了xml<bean>的配置,通过@Bean注入到配置类中,让spring找到写的这个工具类

    在多态的实现中,有时需要很多判断去执行不同的实现,这个时候就可以通过实现类类名或者接口去找到要执行的接口

    举个例子
    1 Map<String, IAddReceipt> map = SpringUtil.getBeanOfType(IAddReceipt.class);
    2         for (IAddReceipt addReceipt : map.values()) {
    3             addReceipt.save(addReceiptVO);
    4         }

    我要实现一个功能,他分了好几个模块的save动作,我定义了一个 IAddReceipt的接口,里面是一个save方法,这几个模块的save我分别建了一个IAddReceipt的实现类,每个实现类里都有自己的操作,这样我获取到这个接口的实现类放到map里,然后去遍历map调用save方法。

    这样在主方法中,就完成了对每个模块的操作。

    反射机制是框架技术的原理和核心部分。通过反射机制我们可以动态的通过改变配置文件(javabean)的方式来加载类、调用类方法,以及使用类属性。这样的话,对于编码和维护带来相当大的便利。在程序进行改动的时候,也只会改动相应的功能就行了,调用的方法是不用改的。更不会一改就改全身。

     




  • 相关阅读:
    Jump Game II
    Trapping Rain Water
    First Missing Positive
    Median of Two Sorted Arrays
    noip2012开车旅行 题解
    AC自动机专题总结
    初探数位DP
    斯坦纳树 [bzoj2595][wc2008]游览计划 题解
    [bzoj3244][noi2013]树的计数 题解
    网络流模型小结
  • 原文地址:https://www.cnblogs.com/double-yuan/p/8609163.html
Copyright © 2011-2022 走看看