最新要闻
- 每日焦点!小朋友把山东的雪带回福建:半路化了 崩溃大哭
- 天天日报丨尼泊尔客机坠毁遇难人数升至68人:没有中国公民
- 环球焦点!王思聪打人后行政拘留为什么能暂缓执行?罗翔科普
- 天天观速讯丨AMD悄悄公布31个CPU漏洞:4个极危险、Zen4高枕无忧
- 男子花32万买比亚迪海豹 内心崩溃:汽配城都没这么难看
- 焦点要闻:节能版酷睿i9-13900T现身:35W战平12900K
- 观天下!腾讯开出48人惩治名单 马化腾曾称内部贪腐“触目惊心”
- 【环球热闻】110度高烧不退!AMD RX 7900 XTX退换货率高达11%
- 为啥北方二十三过小年 南方却是二十四?和康熙乾隆有关
- 观察:无广告一年免费用!通信UOS家庭版22.0开始推送
- 男子买898元零食P图付款 被抓现行:实际支付了1分钱
- 天天通讯!基于传奇车型AE86!丰田推出两款新能源概念改装车
- 女子骑电动车载两人闯红灯被撞 被判全责 网友:这才是公正
- 苹果回应iPhone车祸监测误报频发:正收集相关反馈
- 《新·福音战士剧场版:终》国内海报抄袭!竹也文化官方布道歉声明
- 环球今热点:几十年数学难题被谷歌研究员意外突破 当年差点被导师赶出门
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
实时:day02-Spring基本介绍02
Spring基本介绍02
5.简单模拟Spring基于XML配置的程序
5.1需求说明
自己写一个简单的Spring容器,通过读取beans.xml,获取第一个Javabean:Monster的对象,给该对象属性赋值,放入到容器中,并输出该对象信息
也就是说,不使用spring原生框架,我们自己简单模拟实现,目的是了解Spring容器的简单机制
(资料图)
5.2思路分析
5.3代码实现
引入dom4j.jar包
MyApplicationContext.java:
package com.li.myapplicationcontext;import com.li.bean.Monster;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;import java.io.File;import java.lang.reflect.Method;import java.util.List;import java.util.concurrent.ConcurrentHashMap;/** * @author 李 * @version 1.0 * 1. 这个程序用于实现Spring的一个简单容器机制 * 2. 后面还会详细的实现 * 3. 这里我们主要实现的是如何将beans.xml文件进行解析,并生成对象,放入容器中 * 4. 然后提供一个getBean(id) 返回对应的对象 */public class MyApplicationContext { private ConcurrentHashMap singletonObjects = new ConcurrentHashMap<>(); //构造器 //接收一个容器的配置文件,如 beans.xml,默认路径在src下 public MyApplicationContext(String iocBeanXMLFile) throws Exception { //1.得到配置文件的类加载路径 String path = this.getClass().getResource("/").getPath(); //2.创建 saxReader SAXReader saxReader = new SAXReader(); //3.得到document对象 Document document = saxReader.read(new File(path + iocBeanXMLFile)); //4.得到rootDocument Element rootElement = document.getRootElement(); //5.得到第一个bean-monster01 Element bean = (Element) rootElement.elements("bean").get(0); //6.获取到第一个bean的相关属性(真实的情况下会把属性保存到beanDefinitionMap中) String id = bean.attributeValue("id");//bean的id String classFullPath = bean.attributeValue("class");//类的全路径 List property = bean.elements("property"); //原本是遍历,这里为了简化,就直接获取 //property的value值 Integer monsterId = Integer.parseInt(property.get(0).attributeValue("value")); String name = property.get(1).attributeValue("value"); String skill = property.get(2).attributeValue("value"); //7.反射创建对象 Class> aClass = Class.forName(classFullPath); //这里的 o对象就是Monster对象 Monster o = (Monster) aClass.newInstance(); //给对象赋值-这里为了简化,直接赋值(真实情况下会使用反射) o.setMonsterId(monsterId); o.setName(name); o.setSkill(skill); //8.将创建好的对象放到singletonObjects单例对象池中 singletonObjects.put(id, o); } public Object getBean(String id) { return singletonObjects.get(id); }}
Test.java用于测试:
package com.li.myapplicationcontext;import com.li.bean.Monster;/** * @author 李 * @version 1.0 */public class Test { public static void main(String[] args) throws Exception { MyApplicationContext ioc = new MyApplicationContext("beans.xml"); Monster monster01 = (Monster) ioc.getBean("monster01"); System.out.println("monster01=" + monster01); System.out.println("monsterId=" + monster01.getMonsterId() + " name=" + monster01.getName() + " skill=" + monster01.getSkill()); }}
6.Spring原生容器底层结构梳理
我们之前在Spring基本介绍01--4.5Spring容器的结构/机制有一些基础的分析,现在来梳理一下:
7.练习
7.1关于bean的id
如下,在beans.xml中,我们注入2个Monster对象,但是不指定bean的id
问题1:运行会不会报错?
答:不会报错,可以正常运行。
问题2:如果不报错,你是否能找到分配的id并获取该对象?
答:系统会默认分配id,分配id的规则是:全类名#0,全类名#1......全类名#n,这样的规则来分配id
我们可以通过debug的方式来查看:
beanFactory.beanDefinitionMap.table:
package com.li.homework;import com.li.bean.Monster;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.testng.annotations.Test;/** * @author 李 * @version 1.0 */public class Homework01 { @Test public void getMonster() { ApplicationContext ioc = new ClassPathXmlApplicationContext("beans.xml"); Monster monster01 = ioc.getBean("com.li.bean.Monster#0", Monster.class); System.out.println("monster01=" + monster01); System.out.println("monsterId=" + monster01.getMonsterId()); Monster monster02 = ioc.getBean("com.li.bean.Monster#1", Monster.class); System.out.println("monster02=" + monster02); System.out.println("monsterId=" + monster02.getMonsterId()); System.out.println("ok~~"); }}
在实际开发中不会省略bean的id
7.2练习2
创建一个Car类(属性:id,name,price),具体要求如下:
- 创建ioc容器文件(即配置文件),并配置一个Car对象(bean)
- 通过java程序到ioc容器获取该bean对象,并输出
Car:
package com.li.bean;/** * @author 李 * @version 1.0 */public class Car { private Integer id; private String name; private Double price; public Car() { } public Car(Integer id, String name, Double price) { this.id = id; this.name = name; this.price = price; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } @Override public String toString() { return "Car{" + "id=" + id + ", name="" + name + "\"" + ", price=" + price + "}"; }}
beans2.xml:
Homework02:
package com.li.homework;import com.li.bean.Car;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.testng.annotations.Test;/** * @author 李 * @version 1.0 */public class Homework02 { @Test public void getCart() { ApplicationContext ioc = new ClassPathXmlApplicationContext("beans2.xml"); Car car = ioc.getBean("car01", Car.class); System.out.println(car); }}
实时:day02-Spring基本介绍02
【天天速看料】Redis——数据类型
每日焦点!小朋友把山东的雪带回福建:半路化了 崩溃大哭
天天日报丨尼泊尔客机坠毁遇难人数升至68人:没有中国公民
环球快资讯:golang 为图片加水印
mysql--时间
环球焦点!王思聪打人后行政拘留为什么能暂缓执行?罗翔科普
天天观速讯丨AMD悄悄公布31个CPU漏洞:4个极危险、Zen4高枕无忧
今日热文:Nginx面试题(史上最全 + 持续更新)
当前快讯:Atcoder Regular Contest ARC 153 A B C D 题解
焦点关注:PhotoEnhancer人工智能一键修复老照片,老照片修复,图像去噪
男子花32万买比亚迪海豹 内心崩溃:汽配城都没这么难看
焦点要闻:节能版酷睿i9-13900T现身:35W战平12900K
观天下!腾讯开出48人惩治名单 马化腾曾称内部贪腐“触目惊心”
Phi的反函数
【环球热闻】110度高烧不退!AMD RX 7900 XTX退换货率高达11%
为啥北方二十三过小年 南方却是二十四?和康熙乾隆有关
观察:无广告一年免费用!通信UOS家庭版22.0开始推送
111111
男子买898元零食P图付款 被抓现行:实际支付了1分钱
天天通讯!基于传奇车型AE86!丰田推出两款新能源概念改装车
CF构造题1600-1800(2)
女子骑电动车载两人闯红灯被撞 被判全责 网友:这才是公正
苹果回应iPhone车祸监测误报频发:正收集相关反馈
《新·福音战士剧场版:终》国内海报抄袭!竹也文化官方布道歉声明
Python开发的常用组件
每日观察!推荐一本正在看的书
环球今热点:几十年数学难题被谷歌研究员意外突破 当年差点被导师赶出门
B站2022百大UP主出炉:手工耿入选 走向世界的手工匠人
天天亮点!稳居春节档票房前三:《流浪地球2》官方揭秘太空电梯创作思路
世界讯息:12月新能源销量排名出炉:比亚迪吉利长安强攻 特斯拉扛不住了?
【全球独家】读编程与类型系统笔记08_面向对象变成的元素
观速讯丨长征第462发!我国成功发射一箭14星:“共享”火箭了解下
国内《新·福音战士剧场版:终》限定海报被指抄袭 官方正在联系画师确认
无法恢复!微软杀软Defender误删开始菜单/任务栏捷方式
天天观点:排量830cc 马自达转子发动机正式回归!首车发布
天天亮点!雨雪降温重心转移至南方 大范围雨雪天气明日结束
天天短讯!一步一步实现若依框架--2.3防止重复提交 repeat_submit
焦点快播:2022一年 特斯拉车主为地球节省20亿美元油费
每日消息!全球首现!四川一地发现新物种:长得特别好看
每日动态!《三体》剧版今日CCTV8、腾讯视频全网首播:会员提前看三集
天天观点:使用ActiveMQ Artemis进行重连
环球热议:千万别在有WiFi的房间里摆这种姿势
焦点观察:微软收购动视暴雪更难了!NVIDIA出手阻挠
环球观焦点:联名中国第一科幻IP!荣耀80 Pro《三体》动画定制版来了:限量卖
【全球独家】淘汰所有老款!新一代PS5主机年内到来:不向下兼容
环球热门:无磷配方 低泡易漂 绿伞洗衣液6斤17.9元
每日焦点!碰撞测试能拿一星 创维是造了什么“神仙”车
全球播报:中国科幻顶级IP首登荧屏!《三体》电视剧今晚央视、腾讯视频首播
中国制造多牛?世界最先进工厂:我们占了近一半
今日热文:堪比抢iPhone 泰国车主凌晨排队买!比亚迪泰国发运破万台
世界快报:微信全新拜年红包上线!支持语音祝福录制 动画效果太萌了
当前头条:Python树与树算法
B站大会员促销:12个月年卡到手价98元
天天动态:污染环境?代表建议允许春节分区分时燃放烟花 留住年味
每日消息!吓哭孩子!《中国奇谭》导演回应家长炮轰被网友赞:要走出国门征服老外
吃惊!杭州湿度达到100% 墙壁、窗台“挤”出水:网友吐槽难受到爆
当前聚焦:Linux中查看日志的常用命令
环球聚焦:算法学习笔记(8.2): 上下界网络流
当前最新:直播:央视网络春晚 最美女主播王冰冰亮相:王心凌等也来了
动态焦点:屏幕最小的第二代骁龙8旗舰!曝三星Galaxy S23卖6500元
老款iPhone激活原生灵动岛!DynamicCow教程来了
python批量发邮箱
有了这份Java面试中的葵花宝典,让你面试起飞!!!
每日时讯!还买什么Zen3/Zen4 6核酷睿i5-12490F到手1139元(首发1499)
焦点速讯:公司年终奖老员工人手1个30克金牌 感谢忠诚引热议:网友问还招人吗?
世界微资讯!Codeforces Round #843 (Div. 2) A1A2BCE(D待补)
储量超100万吨 瑞典发现欧洲最大稀土矿床:有望结束进口依赖
环球即时:首发4999元 Bose家庭娱乐扬声器550发布:支持TrueSpace增强原音
苹果iOS 17新特性和新功能抢先看!今年6月登场
有家长炮轰《中国奇谭》 导演回应:审美提高了就理解了
世界速看:Codeforces 1630 E Making It Bipartite 题解 (Dilworth定理)
世界播报:使用 Elasticsearch 搭建自己的搜索系统,这个厉害了。。
理解宏定义
2023春节新片预售票房破3000万:黑马杀出 《流浪地球2》仅排第三
数字化“乡村小道”跑得不舒服,试试低代码“高速公路”
当前看点!一位民办二本学生的年终总结
今日看点:荣耀首款小折叠屏来了:5千档真香
世界信息:今晚8点播出 王冰冰、撒贝宁等人组团剧透央视网络春晚
3999元解决安卓四大不可能 一加11成酷安最热机型:领先第二名一倍
认识Java语言
读编程与类型系统笔记07_子类型
张朝阳称年轻人不要只追求赚钱和快乐:想法不对 你会很痛苦 本人风趣回应
当前热讯:网易开始解散暴雪游戏相关团队!分手已成定局
世界微头条丨特斯拉海外大降价 美国新车主:恶心、不愿再看一眼爱车
全球快消息!门票值了!大熊猫看到游客后展示“才艺”:抱着竹子连续翻跟头
省钱还是抠门?马斯克不交房租:员工在工作日被房东赶出
当前视点!Netty-核心模块组件-4
环球视点!微信将处理假冒仿冒官方组织公众号:严重违规直接删号
全体起立!马自达MX-30 R-EV官图发布:转子发动机回归
全球要闻:雷军晒奖杯:《小米创业思考》获2022豆瓣年度大奖 揭秘小米创业经历
和女神视频聊天再也不害羞了!NVIDIA新技术让你“暗送秋波”:画面以假乱真
今日热讯:新娘刚下婚车遭痱子粉迎面砸脸引网友热议:婚闹是素质缺乏没教养?
当前讯息:“爱妻”来了!理想L7“皇后座”到底有多爽?1米2的腿部空间感受下
万元LV误标1599元被秒拍 得物回应:多次确认无异 无权干预
ruoyi打包jar分离配置部署
环球热消息:今晚8点见!2023央视网络春晚节目单发布:王心凌、董宇辉首次加盟
数论笔记-同余
“背菜女孩”家人回应1年赚20万 不穷:虚构捏造博眼球视频获流量应被整治
每日简讯:国铁西安局回应火车内设麻将桌:系主题定制列车 还有KTV、影院