java spring反射_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 @Override4 public void setApplicationContext(ApplicationContext applicationContext) throwsBeansException {5 if (SpringUtil.applicationContext == null) {6 SpringUtil.applicationContext =applicationContext;7 }8 }9

10 public staticApplicationContext getApplicationContext() {11 returnapplicationContext;12 }13

14 public static Map getBeanOfType(Classclazz) {15 returngetApplicationContext().getBeansOfType(clazz);16 }17

18 public staticObject getBean(String name) {19 returngetApplicationContext().getBean(name);20 }21

22 public static T getBean(Classclazz) {23 returngetApplicationContext().getBean(clazz);24 }25

26 public static T getBean(String name, Classclazz) {27 returngetApplicationContext().getBean(name, clazz);28 }

在spring boot框架中省略了xml的配置,通过@Bean注入到配置类中,让spring找到写的这个工具类

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

举个例子

1 Map 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)的方式来加载类、调用类方法,以及使用类属性。这样的话,对于编码和维护带来相当大的便利。在程序进行改动的时候,也只会改动相应的功能就行了,调用的方法是不用改的。更不会一改就改全身。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值