反射在 Spring 中的应用举例
反射在众多框架中都有普遍的应用。比如 Spring IOC
容器帮我们实例化众多的bean,下面我们简单模拟一下 反射
在其中起到的作用。
Spring 配置文件:
<bean id="pony" class="com.xblzer.dp.proxy.springaop.Pony"></bean>
使用的时候直接这样就能拿到定义的类了:
ApplicationContext ctx = new ClassPathXmlApplicationContext("app_aop.xml"); Pony pony = (Pony) ctx.getBean("pony");
那么是怎么做到的呢?就是通过 反射
。
Spring 通过配置文件实例化对象,并将其放到容器的过程大概就是(模拟):
//伪代码 //1.解析<bean .../>元素的id属性得到该字符串值为“pony” String idStr = "pony"; //解析<bean .../>元素的class属性得到该字符串值为“com.xblzer.dp.proxy.springaop.Pony” String classStr = "com.xblzer.dp.proxy.springaop.Pony"; //利用反射机制,通过classStr获取Class类对象 Class<?> cls = Class.forName(classStr); //实例化对象 Object obj = cls.newInstance(); //放到Spring容器 Map<String, Object> container = new HashMap<>(); container.put(idStr, obj);