开发框架Spring核心技术含Resource接口详细讲解
Spring 是 Java EE 编程领域的一款轻量级的开源框架,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,它的目标就是要简化 Java 企业级应用程序的开发难度和周期。
Spring 自诞生以来备受青睐,一直被广大开发人员作为 Java 企业级应用程序开发的首选。时至今日,Spring 俨然成为了 Java EE 代名词,成为了构建 Java EE 应用的事实标准。
【资料图】
1. Spring简介Spring是一个分层的Java SE/EE应用一站式的轻量级开源框架。Spring核心是IOC和AOP。
Spring主要优点包括:
方便解耦,简化开发,通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码造成的程序耦合度高。AOP编程的支持,通过Spring提供的AOP功能,方便进行面向切面编程。声明式事务的支持,在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。方便程序的测试,可以用非容器依赖的编程方式进行几乎所有的测试工作。方便集成各种优秀框架,Spring提供了对各种优秀框架的直接支持。2. Spring体系结构如下图所示,整个spring框架按其所属功能可以划分为五个主要模块,这五个模块几乎为企业应用提供了所需的一切,从持久层、业务层到表现层都拥有相应的支持,这就是为什么称Spring是一站式框架的原因。
2.1 核心模块(Core Container)Spring的核心模块实现了IoC的功能,它将类和类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描述。由IoC容器负责类的创建,管理,获取等。BeanFactory接口是Spring框架的核心接口,实现了容器很多核心的功能。
Context模块构建于核心模块之上,扩展了BeanFactory的功能,包括国际化,资源加载,邮件服务,任务调度等多项功能。ApplicationContext是Context模块的核心接口。
表达式语言(Expression Language)是统一表达式语言(EL)的一个扩展,支持设置和获取对象属性,调用对象方法,操作数组、集合等。使用它可以很方便的通过表达式和Spring IoC容器进行交互。
2.2 AOP模块Spring AOP模块提供了满足AOP Alliance规范的实现,还整合了AspectJ这种AOP语言级的框架。通过AOP能降低耦合。
2.3 数据访问集成模块(Data Access/Integration )该模块包括了JDBC、ORM、OXM、JMS和事务管理:
事务模块:该模块用于Spring管理事务,只要是Spring管理对象都能得到Spring管理事务的好处,无需在代码中进行事务控制了,而且支持编程和声明性的事务管理。JDBC模块:提供了一个JBDC的样例模板,使用这些模板能消除传统冗长的JDBC编码还有必须的事务控制,而且能享受到Spring管理事务的好处。ORM模块:提供与流行的“对象-关系”映射框架的无缝集成,包括hibernate、JPA、MyBatis等。而且可以使用Spring事务管理,无需额外控制事务。OXM模块:提供了一个对Object/XML映射实现,将Java对象映射成XML数据,或者将XML数据映射成java对象,Object/XML映射实现包括JAXB、Castor、XMLBeans和XStream。JMS模块:用于JMS(Java Messaging Service),提供一套“消息生产者、消息消费者”模板用于更加简单的使用JMS,JMS用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。2.4 Web模块该模块建立在ApplicationContext模块之上,提供了Web应用的功能,如文件上传、FreeMarker等。Spring可以整合Struts2等MVC框架。此外,Spring自己提供了MVC框架Spring MVC。
2.5 测试模块Spring可以用非容器依赖的编程方式进行几乎所有的测试工作,支持JUnit和TestNG等测试框架。
3. 初识Ioc与DI我们首先来讲解一下IoC的概念。IoC(控制反转:Inverse of Control)是Spring容器的核心,但是IoC这个概念却比较晦涩,让人不太容易望文生义。
3.1 IoC控制反转和DI依赖注入传统程序设计中,我们需要使用某个对象的方法,需要先通过new创建一个该对象,我们这时是主动行为;而IoC是我们将创建对象的控制权交给IoC容器,这时是由容器帮忙创建及注入依赖对象,我们的程序被动的接受IoC容器创建的对象,控制权反转,所以叫控制反转。
由于IoC确实不够开门见山,所以提出了DI(依赖注入:Dependency Injection)的概念,即让第三方来实现注入,以移除我们类与需要使用的类之间的依赖关系。总的来说,IoC是目的,DI是手段,创建对象的过程往往意味着依赖的注入。我们为了实现IoC,让生成对象的方式由传统方式(new)反转过来,需要创建相关对象时由IoC容器帮我们注入(DI)。
简单的说,就是我们类里需要另一个类,只需要让Spring帮我们创建 ,这叫做控制反转;然后Spring帮我们将需要的对象设置到我们的类中,这叫做依赖注入。
3.2 常见的几种注入方法使用有参构造方法注入
public class User{ private String name; public User(String name){ this.name=name; }} User user=new User("tom");
使用属性注入
public class User{ private String name; public void setName(String name){ this.name=name; }} User user=new User(); user.setName("jack");
使用接口注入
// 将调用类所有依赖注入的方法抽取到接口中,调用类通过实现该接口提供相应的注入方法。 public interface Dao{ public void delete(String name);} public class DapIml implements Dao{ private String name; public void delete(String name){ this.name=name; }}
通过容器完成依赖关系的注入
上面的注入方式都需要我们手动的进行注入,如果有一个第三方容器能帮助我们完成类的实例化,以及依赖关系的装配,那么我们只需要专注于业务逻辑的开发即可。Spring就是这样的容器,它通过配置文件或注解描述类和类之间的依赖关系,自动完成类的初始化和依赖注入的工作。
3.3 Spring的IoC例子(1) 创建工程,导入jar包
这里我们只是做IoC的操作,所以只需要导入核心模块里的jar包,beans、core、context、expression等。因为spring中并没有日志相关的jar包,所以我们还需要导入log4j和commons-logging。
(2) 创建一个类
public class User { public void add(){ System.out.println("add....."); }}
(3) 创建一个xml配置文件
//配置要创建的类
(4) 进行测试
//这只是用来测试的代码,后期不会这么写public class Test { @org.junit.Test public void test(){ //加载配置文件 ApplicationContext context=new ClassPathXmlApplicationContext("bean.xml"); //获取对象 User user=(User) context.getBean("user"); System.out.println(user); //调用方法 user.add(); }}
在容器启动时,Spring会根据配置文件的描述信息,自动实例化Bean并完成依赖关系的装配,从容器中即可获得Bean实例,就可以直接使用。Spring为什么仅凭一个简单的配置文件,就能神奇的实例化并配置好程序使用的Bean呢?答案是通过 Java的反射技术。
3.4 Spring的DI例子我们的service层总是用到dao层,以前我们总是在Service层new出dao对象,现在我们使用依赖注入的方式向Service层注入dao层。
// UserDaopublic class UserDao { public void add(){ System.out.println("dao....."); }}// UserServicepublic class UserService { UserDao userdao; public void setUserdao(UserDao userdao){ this.userdao=userdao; } public void add(){ System.out.println("service......."); userdao.add(); }}----------------------------------------------------// 配置文件 //这样在实例化service的时候,同时装配了dao对象,实现了依赖注入 //ref为dao的id值
4. Spring资源访问神器——Resource接口JDK提供的访问资源的类(如java.NET.URL,File)等并不能很好很方便的满足各种底层资源的访问需求。Spring设计了一个Resource接口,为应用提供了更强的访问底层资源的能力,该接口拥有对应不同资源类型的实现类。
4.1 Resource接口的主要方法boolean exists():资源是否存在boolean isOpen():资源是否打开URL getURL():返回对应资源的URLFile getFile():返回对应的文件对象InputStream getInputStream():返回对应资源的输入流Resource在Spring框架中起着不可或缺的作用,Spring框架使用Resource装载各种资源,包括配置文件资源,国际化属性资源等。
4.2 Resource接口的具体实现类ByteArrayResource:二进制数组表示的资源ClassPathResource:类路径下的资源 ,资源以相对于类路径的方式表示FileSystemResource:文件系统资源,资源以文件系统路径方式表示,如d:/a/b.txtInputStreamResource:对应一个InputStream的资源ServletContextResource:为访问容器上下文中的资源而设计的类。负责以相对于web应用根目录的路径加载资源UrlResource:封装了java.net.URL。用户能够访问任何可以通过URL表示的资源,如Http资源,Ftp资源等4.3 Spring的资源加载机制为了访问不同类型的资源,必须使用相应的Resource实现类,这是比较麻烦的。Spring提供了一个强大的加载资源的机制,仅通过资源地址的特殊标识就可以加载相应的资源。
Spring定义了一套资源加载的接口。ResourceLoader接口仅有一个getResource(String location)的方法,可以根据资源地址加载文件资源。资源地址仅支持带资源类型前缀的地址,不支持Ant风格的资源路径表达式。ResourcePatternResolver扩展ResourceLoader接口,定义新的接口方法getResources(String locationPattern),该方法支持带资源类型前缀以及Ant风格的资源路径的表达式。PathMatchingResourcePatternResolver是Spring提供的标准实现类。
标签:
- 于中央别墅区塑造全新城市生活空间 和光瑞府无界跃墅实景样板开放|当前资讯
- 陈梦4-3险刘诗雯晋级四强,决胜局差点打出110,半决赛对阵伊藤 全球速递
- 乐平市塔山街道:禁毒教育宣讲进校园 护航青少年健康成长
- 【环球财经】日本工商界关注第六届进博会开放平台作用 世界时讯
- 6月26日国内DBP企业报价下跌 每日热点
- 环球滚动:Fly、九尾、无畏均无缘亚运会,KPL能否首发?还真不好说!
- 热资讯!订单不足,放假一个月?员工称此前就放过一个月假,这家公司管理层人士回应
- 微资讯!寻仙迹_关于寻仙迹介绍
- 江苏洪泽农商银行 聚焦“三项需求”全方位支持实体经济 世界时快讯
- 长沙:拟用住房公积金增值收益约4.35亿购买1100余套公租房 天天资讯
- 三联锻造6月26日加速下跌 天天看点
- 每日资讯:【P站美图】白发天然美少女!《Summer Pockets》鸣濑白羽壁纸特辑
- 今年1月-5月进出口增长强劲 厦企享退税120亿
- 焦点滚动:世界互联网大会数字文明尼山对话今日在山东曲阜召开
- 咖啡馆不够用了,植物奶还能去哪儿?
- 每日热讯!保险创新要让消费者 更从容地应对风险
- 俄国防部长绍伊古现身前线视察 基本情况讲解 世界观焦点
- 每日时讯!天平街道永安社区开展“粽叶飘香·品味端午”活动
- 【世界播资讯】“雷锋”的哥变身社区“保洁员”,为高龄老人打造温馨舒适家居环境
- 2023河北高考普通类录取控制分数线(历史+物理)_环球视点
- 世界报道:防火涂料耐火2小时喷多厚
- 美国一机场地勤人员被卷入飞机发动机后丧生
- 【世界时快讯】毒品犯罪高发势头得到有效遏制 全国铁路公安机关查缉、宣传“两手抓”
- 溢价率1.42%!保利发展14.29亿摘得花地湾蕙兰苑宅地
- 18亿亩耕地红线如何严守?3个问题带你了解→
- 这几天,康定上演了这些暖心事儿……_世界观察
- 【环球报资讯】如何利用Python语言优化数据爬虫性能
- 今头条!中博城售楼处暂停开放!
- 热门:江苏2023年退休人员养老金8157元,医保个人账户计入440元吗?
- 微信小程序手机号快速验证组件升级,8月26日起收费实施,开发者需留意费用变动
- 昆明滇源司法所联合调解促和谐 村民新签租地协议_天天简讯
- 郎平卸任后首次采访:可以说遗憾_但是不能说后悔
- 天天简讯:北京多部门联合专项整治非法倒票 抓获143名“黄牛”
- 贵阳市南明区红十字会开展造血干细胞宣传招募采样志愿服务活动|环球看点
- 十二星座的专属创意笔记本,天蝎座的优雅古典,射手座是可爱菠萝|焦点
- “五百元好礼,轻松印心意!如何将唇印保留在卡片上送给女友?” 资讯
- 二氧化碳电还原反应机理有了新认识|当前快讯
- 从《狂飙》到《漫长的季节》 爆款剧是怎么诞生的?
- 2023天津津南区生源地助学贷款还款规则
- 唐克丽:黄土高原“不了情” 当前热文
- 中上协:未来三年,上市公司总市值超过GDP是大概率事件
- 股票000789|世界热门
- 吴越拿白玉兰视后却引争议,靠演小三翻红,和陈建斌同居五年却惨被抛弃|环球热资讯 当前播报
- 浙江公布2023高考分数线
- 当前简讯:当“硅胶脸”混进《繁华似锦》,撞上天然脸演员,简直是降维打击
- 为了亚运会杭州拼了,燃油车再次进入网约车行业,一喂全力支持 全球微速讯
- 海锅股份:人民币兑美元贬值对于公司经营业绩有正向影响_当前短讯
- 环球热点!电动车热潮下,防自燃的“复合集流体产业”异军突起
- 杭州网约车门槛升级:非电动车车价要在15万以上 轴距需超2.7米
- 今日热闻!兰州黄河生态旅游开发集团7.9亿元私募债项目获反馈
- 太龙药业已累计回购2%股份 耗资6218.04万元_世界看热讯
- 环球短讯!文旅市场复苏势头强劲 继续释放消费潜力
- 支持拼多多一件代发的平台有哪些
- 中证500ETF(159922)成交额超7亿元,第一大重仓股昆仑万维跌超10%丨ETF观察-热门看点
- 影像性能设计全面焕新 vivo X90s正式发布 3999元起售
- 环球微头条丨6月26日东北地区地炼汽柴油报价暂稳
- 世界今热点:货运无人机研发商【白鲸航线】完成数千万元天使轮融资,真成投资领投
- 公积金贷款买房可以用夫妻两人叠加的吗
- 焦点热文:胡伟出任京东物流CEO 闫小兵“回归”组建创新零售部
- 看热讯:端午假期迎客流高峰 这些口岸客流持续高位运行
- 每日快报!一个人痛苦的根源:“困”在别人的期待里
- 全球新资讯:端午粽飘香 传承爱国情——端午节主题活动成果展示
- 全球热文:化德县发布雷电黄色预警
- 焦点热文:曝三星Galaxy S24系列内部代号“缪斯”,大杯S24+不会被砍
- 【快播报】打造“务实资规” 益阳市自然资源和规划局千方百计优化空间布局
- 天天百事通!盘核桃终究是一场空,经常盘核桃并不好,还不如玩沉香
- 50万㎡临江宅地+城改!创新城即将甩出王炸!-天天新要闻
- 同为股份:目前公司业务不涉及人形机器人领域
- 竞业达(003005)6月26日主力资金净卖出456.45万元_环球快播报
- 6月26日海量数据跌6.59%,诺安创新驱动混合A基金重仓该股|环球快报
- 四川省攀枝花市仁和抽水蓄能电站“三大专题”报告通过审查,规划总院主持召开会议
- 城市互联互通 产业串珠成链 文化交融互通 大湾区高质量发展动能澎湃 精选
- 动态:2023 Verizon 数据泄露报告:74%安全事件存在人为因素
- 热点!安庆师范大学:主题教育书写痛难点问题解决“成绩单”
- 如何在CSGO中快速开箱子? CSGO快速开箱子网站盘点 天天快看点
- 澳大利亚悉尼举行女足世界杯倒计时25天庆祝活动|环球快消息
- 湖北发布首个反餐饮浪费团体标准
- 春秋电子: 关于闲置募集资金暂时补充流动资金部分归还的公告 全球实时
- 每天笑一笑歌词_每天笑一笑 焦点短讯
- 第十四届夏季达沃斯论坛明天在天津开幕
- 中上协黄运成:未来三年内中国上市公司总市值大概率将超过GDP|短讯
- 再上130万亿 个人存款回升!银行集体出手:下调存款利率!还有三大“法宝”-全球滚动
- 环球今亮点!速干面料成分都是哪些_速干面料是什么材质简介介绍
- 宋金采石之战 时讯
- 天天速看:终极三国2017第一季多少集 终极三国2017第二季什么时候上映
- 天天微资讯!性价比超高!27英寸科欧斯IPS显示器仅需779元
- 太突然!知名创始人去世,年仅42岁
- 环球焦点!免维护蓄电池修复技巧_免维护蓄电池修复方法
- 全球播报:2023浙江高考分数线发布 普通类一段线488分、二段线274分
- 农历新年的第一天俗称是什么?_微资讯
- 固态硬盘怎么安装在笔记本上(固态硬盘笔记本)
- 淘宝(客服)-世界最新
- 扬州个园门票_个园门票
- “统筹发展和安全、完善国家出口管制体系”专题研究班成功举办
- 北京小客车首期摇号有多“卷”? 快看
- 脸上长斑激光能去掉吗-当前视点
- 环球最新:万通保险方澄清:中国恒大中心更名为租户权益,与大厦业主权属无关
- 焦点播报:韩方称没理由和中国结怨交恶,外交部:望韩方与中方相向而行
- 大连人队迎来重大喜讯,谢晖作出重要表态,球迷这回可以安心了
- 南京哪里可以学做小吃特色的地方(2022南京10大人气榜有没有学小吃培训班精选名单汇总) 独家焦点