java Spring boot使用spring反射
2018-06-18 02:42:08来源:未知 阅读 ()
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)的方式来加载类、调用类方法,以及使用类属性。这样的话,对于编码和维护带来相当大的便利。在程序进行改动的时候,也只会改动相应的功能就行了,调用的方法是不用改的。更不会一改就改全身。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- Spring系列.ApplicationContext接口 2020-06-11
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash