反射在 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); 

 

posted @ 2023-02-01 16:50  r1-12king  阅读(241)  评论(0编辑  收藏  举报