时间:2015-03-13 来源:

【SSH进阶之路】一步步重构容器实现Spring框架——配置文件+反射实现IoC容器(十) 【编程语言】

目录      【SSH进阶之路】一步步重构容器实现Spring框架——从一个简单的容器开始(八)      【SSH进阶之路】一步步重构容器实现Spring框架——解决容器对组件的“侵入式”管理的两种方案--主动查找和控制反转(九)      【SSH进阶之路】一步步重构容器实现Spring框架——配置文件+反射实现IoC容器(十)      【SSH进阶之路】一步步重构容器实现Spring框架——彻底封装承接网页制作, Object>(); public ClassPathXmlApplicationContext(String fileName) { this.readXML(fileName); } // 解析xml文件,网站div+css通过反射将配置的beasn放到container中符合w3c标准,并实现依赖注入 private void readXML(String fileName) { // 创建SAXBuilder对象 SAXBuilder saxBuilder = new SAXBuilder(); // 读取资源,手机html制作获得document对象 Document doc; try { doc = saxBuilder.build(this.getClass().getClassLoader().getResourceAsStream(fileName)); // 获取根元素 Element rootEle = doc.getRootElement(); // 从根元素获得所有的子元素网页外包接活, "/beans/bean"); // 遍历根元素的子元素集合web前端制作,扫描配置文件中的bean for (int i = 0; i < listBean.size(); i++) { Element bean = (Element) listBean.get(i); // 获取id属性值 String id = bean.getAttributeValue("id"); // 获取class属性值 String clazz = bean.getAttributeValue("class"); // 反射,div+css制作实例化 Object o = Class.forName(clazz).newInstance(); beans.put(id, o); } // 依赖管理,承接网页制作这里还不灵活web切图报价,但是原理是一样的 Service service = (Service) beans.get("service"); Dao dao = (Dao) beans.get("dao"); // 依赖注入,web切图报价Service实现依赖dao的实现 service.setDao(dao); } catch (Exception e) { e.printStackTrace(); } } /** * 查找组件 * * @param id * @return */ @Override public Object getBean(String id) { return beans.get(id); } }      看到上面的代码符合w3c标准,我们发现读取配置文件的方法中包含了反射,html切图制作代码的可读性太差网页外包接活,并且对面向对象的封装不够彻

口对具体实现的依赖关系,网页外包接活封装了一个特别简陋的容器.

简单配置web前端制作,反射   

  

       上篇博文容器初始化时,web前端制作使用new的方式来实力化对象承接网页制作,这篇博文我们利用配置文件+反射实力化对象,div前端切图进一步封

public class BeanDefinition { private String id; private String className; public BeanDefinition(String id,我们利用控制反转符合w3c标准,去掉了组件对容器的依赖.

<?xml version="1.0" encoding="UTF-8"?> <beans> <bean id="dao" class="com.tgb.container.dao.impl.Dao4MySqlImpl" /> <bean id="service" class="com.tgb.container.service.impl.ServiceImpl" /> </beans>       看到上面的配置文件,手机html制作除了命名空间没有网页外包接活,和Spring的配置文件已经很像了,jpg或psd转html下面我们就使用dom4j或jdom来读取

影子了web前端制作,还没有达到神似的目标.

       上篇博文【SSH进阶之路】一步步重构容器实现Spring框架——解决容器对组件的“侵入式”管理的两种方案--主

承接网页制作,下面我们将bean的实例化以及依赖注入进行进一步的封装.

们看一下读取配置文件的代码:

配置文件,承接网页制作并将配置文件中配置类利用反射实例化.本实例我们使用的jdom,我们为了去掉接

灵活创建对象的部分符合w3c标准,依赖注入部分是由我们手动注入的. 对象的依赖关系还不灵活,手机html制作但是我们已经能够看到IoC的

import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; import org.jdom.xpath.XPath; import com.tgb.container.dao.Dao; import com.tgb.container.service.Service; /** * 容器 * * @author liang * */ public class ClassPathXmlApplicationContext implements BeanFactory { // 用于存放Bean private List<BeanDefinition> beanDefines = new ArrayList<BeanDefinition>(); // 用于存放Bean的实例 private Map<String, Object>(); public ClassPathXmlApplicationContext(String fileName) { this.readXML(fileName); this.instanceBeans(); this.injectObject(); } /** * 依赖注入web前端制作,为bean对象的属性注入值 * 这里还不灵活,div+css制作但是原理是一样的 */ private void injectObject() { Service service = (Service) this.sigletons.get("service"); Dao dao = (Dao) this.sigletons.get("dao"); //依赖注入承接网页制作,Class.forName(beanDefinition.getClassName()).newInstance() ); } } catch (Exception e) { e.printStackTrace(); } } } /** * 读取xml配置文件 */ private void readXML(String fileName) { // 创建SAXBuilder对象 SAXBuilder saxBuilder = new SAXBuilder(); try { // 读取资源web切图报价,获得document对象 Document doc = saxBuilder.build(this.getClass().getClassLoader() .getResourceAsStream(fileName)); // 获取根元素 Element rootEle = doc.getRootElement(); // 从根元素获得所有的子元素,web切图报价建立元素集合 List listBean = XPath.selectNodes(rootEle, "/beans/bean"); // 遍历根元素的子元素集合,html切图制作扫描配置文件中的bean for (int i = 0; i < listBean.size(); i++) { Element bean = (Element) listBean.get(i); // 获取id属性值 String id = bean.getAttributeValue("id"); // 获取class属性值 String clazz = bean.getAttributeValue("class"); BeanDefinition beanDefine = new BeanDefinition(id,clazz); // 将javabean添加到集合中 beanDefines.add(beanDefine); } } catch (Exception e) { e.printStackTrace(); } } /** * 获取bean实例 */ @Override public Object getBean(String beanName) { return this.sigletons.get(beanName); } }       我们知道容器不仅负责创建对象,网页外包接活而且可以管理对象的依赖关系web前端制作,管理对象的生命周期等等.我们仅实现了容器

封装bean的实例化

上送上.

      下篇博文【SSH进阶之路】一步步重构容器实现Spring框架——彻底封装,web前端制作实现简单灵活的Spring框架(十一),马

       为了做进一步的封装,div前端切图我们将配置文件的属性封装成一个javabean,为了存放我们的属性值.如下所示:

点击次数:6375
作者:
web前端行业资讯
Web new NewsList
微软发布WindowsServerBuild17074更新 ,,2018年01月18日凭借一个AI小功能,这款Google应用冲上苹果AppStore榜首 ,,2018年01月18日百度数据可视化实验室正式成立,发布深度学习可视化平台VisualDL ,,2018年01月18日OpenAI开源最新工具包,模型增大10倍只需额外增加20%计算时间 ,,2018年01月18日百度手机输入法8.0正式发布:支持多人语音速记 ,,2018年01月18日CSDN宣布收购TinyMind团队并升级为AI社区 ,,2018年01月18日甲骨文发布补丁修复英特尔芯片漏洞造成的问题 ,,2018年01月18日权威!官方发布CPU熔断和幽灵漏洞防范指引:附补丁下载 ,,2018年01月18日Oracle宣布新的JavaChampions ,,2018年01月18日腾讯加码区块链项目已悄然注册“以太锁”商标 ,,2018年01月18日Fedora28壁纸征集活动现已开幕:将持续至2月13日 ,,2018年01月18日苹果WebKit团队发布Speedometer2.0网页响应测试工具 ,,2018年01月18日百度输入法8.0后天发布:全感官AI输入 ,,2018年01月18日腾讯和乐高合作:共同研发智能玩具、游戏 ,,2018年01月18日HomePod上市日益临近智能音箱市场吸引力越来越大 ,,2018年01月18日3D打印脑组织?科学家正在向这一目标正在前进 ,,2018年01月18日英特尔公布修补漏洞后PC性能数据:8代CPU影响最小 ,,2018年01月18日云存储公司Dropbox秘密提交IPO申请估值超百亿美元 ,,2018年01月18日iPod之父:防手机上瘾无技术难度苹果谷歌应承担责任 ,,2018年01月18日芯片不安全英特尔云客户考虑转用AMD等对手处理器 ,,2018年01月18日2018年Java展望 ,,2018年01月18日区块链有多火?快播流量矿石遭20多万人疯抢 ,,2018年01月18日Intel搞定神经拟态芯片:模拟人类大脑、自主学习 ,,2018年01月18日阿里巴巴发布IoTConnect开放连接协议,盼推动语音互动入口普及 ,,2018年01月18日区块链火了,全球大佬们怎么看? ,,2018年01月18日Facebook正测试新功能主推本地新闻资讯 ,,2018年01月18日在GooglePlay中发现使用Kotlin开发的安卓恶意软件 ,,2018年01月18日VisualStudio201715.6预览版本2,增加新功能 ,,2018年01月18日百度陆奇:AI是5G最好的加速器 ,,2018年01月18日PinterestCEO:不同于谷歌和Facebook,我们走了第三条路 ,,2018年01月18日用bind方法保持this上下文 【移动开发】2015年08月27日10款精致的jQuery倒计时插件推荐 ,,2016年07月24日leetcode_GasStation 【云计算】2015年05月19日AndroidScrollView妙用(scrollingtricks详解) 【移动开发】2014年12月09日poj1164TheCastledp区域计数水题 【移动开发】2015年01月26日Hdu2018母牛的故事 【研发管理】2014年11月27日IRIG-B编码---GPS授时【编程语言】2015年03月13日ASP得到文件的大小类型最后修改时间2014年01月29日jstat分析JVM内存【互联网】2015年02月15日PHP设计模式——单例模式 【架构设计】2015年04月24日linuxshell正则表达式(BREs,EREs,PREs)差异比较2014年01月29日leetcode223:RectangleArea【移动开发】2015年06月11日几个C#常用正则表达式的总结2014年01月29日使用HttpWebRequest向网站模拟上传数据2014年01月29日【iOS】获取设备具体型号信息【架构设计】2015年07月03日NYOJ68三点顺序 【综合】2015年04月17日儿子的手机关机了还能定位吗?QQ1622863529【互联网】2014年11月06日Java打包成exe安装程序制作工具,install4j5.1发布 1,收藏 ,,2016年06月23日MarathonMatch2015年08月24日leetcode_113_PathSumII 【移动开发】2015年03月30日设计模式之工厂模式 【编程语言】2015年06月11日cocos2dx下C++11正则表达式和android下C语言正则表达式的使用--------案例密码校验 【移动开发】2015年01月12日三大经典博弈尼姆博奕+巴仕博弈+威佐夫博弈+SG函数 【综合】2015年08月24日Behavioral模式之Strategy模式 【编程语言】2015年06月24日Android手机中的2048游戏Demo开发 【Web前端】2015年07月07日深入PHP许愿墙模块功能分析2014年01月29日C++HOJ猴子分桃 【移动开发】2015年07月13日uvalive4253(暴力) 【编程语言】2015年03月27日howtotranslatethetextofpushbutton 【编程语言】2015年07月09日巧用博客推广的魅力一天10000访问量2014年01月28日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)