正在回答 回答被采纳积分+1
1回答
芝芝兰兰
2019-10-17 14:36:49
同学你好。下面来一条条解答你的疑惑:
1、对反射通俗的理解是,将正常的new出一个对象并使用其方法的过程,给“反”了一下。指的是这段Java代码不需要new具体对象,根据类名拿到Class就可以直接使用实例。
2、耦合其实就是关联度,如果在代码中都自己来new 对象,然后使用。那么一旦这个类有了更改,那么所有曾经使用过new的位置全部要修改。这种现象就是代码耦合。要降底耦合度,就尽量将所有实例“整理”到一起集中管理。如果修改,尽量做到只改一处。这就降低了耦合度。
4、比如对于 2-3 代码实现 课程的例子,做了如下配置:
<bean id="userService" class="com.imooc.ioc.demo1.UserServiceImpl"> <property name="name" value="李四"/> </bean>
在Spring容器中的关键步骤是这样的 ,注意只是伪代码不是实际代码:
//--------------------- 先实例化对象 //解析<bean .../>元素的id属性得到该字符串值为“userService” String idStr = "userService"; //解析<bean .../>元素的class属性得到该字符串值为“com.imooc.ioc.demo1.UserServiceImpl” String classStr = "com.imooc.ioc.demo1.UserServiceImpl"; //利用反射知识,通过classStr获取Class类对象 Class<?> cls = Class.forName(classStr); //实例化对象 Object obj = cls.newInstance(); //container表示Spring容器 container.put(idStr, obj); //--------------------- 下面注入属性值 //解析<property .../>元素的name属性得到该字符串值为“name” String nameStr = "name"; //生成将要调用setter方法名 String setterName = "set" + nameStr.substring(0, 1).toUpperCase() + nameStr.substring(1); //获取spring容器中名为value的值转换为Object对象,将会作为传入参数 Object paramBean = (Object)"李四"; //获取setter方法的Method类,此处的cls是刚才反射代码得到的Class对象 Method setter = cls.getMethod(setterName, paramBean.getClass()); //调用invoke()方法,此处的obj是刚才反射代码得到的Object对象 setter.invoke(obj, paramBean);
通过解析xml文件,获取到id属性和class属性里面的内容,利用反射原理获取到配置里面类的实例对象,存入到Spring的bean容器中。
如果解答了同学的疑问,望采纳~
祝学习愉快~
SSM主流框架入门与综合项目实战2018版
- 参与学习 人
- 提交作业 205 份
- 解答问题 4317 个
Java中非常实用的SSM整合开发内容,从Spring开始,到MyBaits的进阶内容,再到SpringMVC的应用,最后是SSM整合开发案例,逐步深入,助你成长为一名Java工程师!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星