第二章--第一个Spring程序
1.版本
Spring版本:5.1.4
官方网站:www.spring.io
2.环境搭建
spring jar包
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.4.RELEASE</version>
</dependency>
spring配置文件
1.配置文件的放置位置:任意
2.配置文件的命名:任意 建议:applicationContext.xml
3.以后应用Spring框架时,需要进行配置文件路径的设置。
3.Spring的核心API
ApplicationContext
1.作用:Spring提供的 ApplicationContext这个工厂,用于对象的创建
2.好处:解耦合
ApplicationContext接口类型
1.接口:屏蔽实现的差异
2.非web环境:ClassPathXmlApplicationContext(main junit)不启用服务器
3.web环境: XmlWebApplicationContext
重量级资源
1.ApplicationContext工厂的对象占用大量内存
2.不会频繁的创建对象:一个应用只会创建一个工厂对象!
3.ApplicationContext工厂:一定是线程安全的(多线程并发访问)
4.程序开发
1.创建类型
public class Person {}
2.配置文件的配置 applicationContext.xml<!-- id属性 名字(唯一)相当于properties中的key-->
<!-- class属性 配置全限定类名 相当于properties中的value--><bean id="person" class="com.dy.basic.Person"/>3.通过工厂类获得对象
ApplicationContext :ClassPathXmlApplicationContext//1.获得Spring的工厂 AppletContext接口不能实例化 要new它的实现类ApplicationContext ctx = new ClassPathXmlApplicationContext("/appletContext.xml");// 2.通过工厂类获得对象 要强转 原因在上篇讲过Person person = (Person) ctx.getBean("person");
5.细节分析
名词解释
1.Spring工厂创建的对象,叫做bean或者组件(componet)
2.Spring工厂其他的相关方法://1.此重载方法不需要强转Person person1 = ctx.getBean("person", Person.class);//2.当前Spring的配置文件中,只能有一个bean的class的Person类型Person person2 = ctx.getBean(Person.class);//3.bean(对象)定义的名字 获取的是Spring工厂配置文件中所有bean标签的id值String[] beanDefinitionNames = ctx.getBeanDefinitionNames();//4.根据参数中的类型获取Spring配置文件中对应的id值String[] beanNamesForType = ctx.getBeanNamesForType(Person.class);//5.用于判断是否存在指定id值的bean 返回boolean型 不能判断name值if (ctx.containsBeanDefinition("person")) {System.out.println("true");}//6.用于判断是否存在指定id或者name值的beanctx.containsBean("person");
配置文件中的细节
1.只配置class属性<bean class="com.dy.basic.Person"/>Person person = ctx.getBean(Person.class);
通过此重载方法获得没有id值的对象
a)上述这种配置, 会有自动生成的id值
b)应用场景:如果这个bean只需要使用一次,那么就可以省略id值//如果这个bean会使用多次,或者被其他bean引用则需要设置id值
2.name属性:用于在Spring的配置文件中,为bean对象定义别名(小名)
与id相同点:1.ctx.getBean("id/name")都可以获取到对象2.<bean id="" class = ""等效<bean name="" class=""
区别://1.别名可以定义多个 但是id唯一//2.XML的id属性值命名要求:必须以字母开头(以前)// name属性命名要求:没有要求,随意// 所以name属性应用在特殊命名的场景下:eg:/person
// XML发展到了今天:id属性的限制:不存在 /person id可以特殊字符命名开头3.代码://5.用于判断是否存在指定id值的bean 返回boolean型 不能判断name值if (ctx.containsBeanDefinition("person")) {System.out.println("true");}//6.用于判断是否存在指定id或者name值的beanctx.containsBean("person");
============================================
6.Spring工厂的底层实现原理(简易版)
7.思考
问题:未来在开发过程中,是不是所有的对象,都会交给SpringI厂来创建呢?
回答:理论上是的,但是有特例:实体对象( entity)是不会交给Spring创建,它是由持久层框架进行创建。
实体对象封装数据库中表的数据,数据必须要操作数据库,Spring不知道数据库。
本系列文章从Spring5原理开始深入浅出,从工厂特性=>依赖注入–IOC=>AOP编程=>Spring事务=>纯注解开发。本文来自观看B站孙帅Spring教程后做的笔记。持续更新…
第二章--第一个Spring程序相关推荐
- 第一章第一个c#程序上机_我从第一个#100DaysOfCode中学到的东西
第一章第一个c#程序上机 On May 17th, I completed my first round of #100DaysOfCode. In case you haven't heard, # ...
- 从零开始Android游戏编程(第二版) 第二章 创建第一个程序Hello Tank
第二章 创建第一个程序Hello Tank 难度:容易 现在开始,我们要真正写作Android程序了.虽然前面安装过程那么复杂,但是写起程序来却是非常简单.而且为了让大家有一个直观的认识,本文不会叙述 ...
- 第一个spring程序
第一个spring程序: 第一步:导入jar包. 新建maven项目: <dependency><groupId>org.springframework</groupId ...
- 编写第一个Spring程序——IOC实现
第一个Spring程序 IOC范例 1.新建maven工程 2.在pom.xml文件中导入相关jar包 <!-- https://mvnrepository.com/artifact/org.s ...
- 【Spring 工厂】工厂设计模式、第一个Spring程序细节分析、整合日志框架
Spring 引言 什么是 Spring? 工厂设计模式 简单工厂的设计 通用工厂的设计 通用工厂的使用方式 第一个 Spring 程序 环境搭建 Spring 的核心API 程序开发 细节分析 Sp ...
- 《C Primer Plus》第二章——C语言概述(程序示例与解释,提高程序可读性,函数的定义与使用,调试,关键字,复习题与编程练习)
文章目录 第二章-C语言概述 本章内容 简单的C程序示例 示例解释 快速概要 程序细节 简单程序的结构 提高程序可读性的技巧 进一步使用C 多个函数 调试程序 语法错误 语义错误 程序状态 关键字和保 ...
- 第二章 装配Bean(Spring in action,3th)
第二章 装配Bean 创建应用对象之间协作关系的行为通常被称为装配(wiring),是依赖注入的本质. XML方式声明Bean ...
- python语言程序设计基础第二章答案_python语言程序设计基础(嵩天版),第二章程序练习题...
python语言程序设计基础(嵩天版),第二章程序练习题 欢迎访问江南烧酒的博客 2.2汇率兑换程序.按照1美元=6人民币汇率编写一个美元和人民币的双向兑换程序. """ ...
- 关东升python从小白到大牛_《Python从小白到大牛》第3章 第一个Python程序
本章以HelloWorld作为切入点,介绍如何编写和运行Python程序代码. 运行Python程序主要有两种方式: 1.交互式方式运行 2.文件方式运行 本章介绍这两种运行方式实现HelloWorl ...
最新文章
- linux日志手机,通过 shell 脚本 自动发送 log日志 文件内容 到手机邮箱
- Oracle排序中NULL值处理的五种常用方法
- MYSQL批量插入数据库实现语句性能分析
- nyoj 174 Max Sequence(最大子串和变形)
- CentOS安装php mbstring的扩展
- 通过 Feature Level 动态控制 SAP Spartacus 的页面显示
- [复习]莫比乌斯反演,杜教筛,min_25筛
- java如何导入和导出ex_SpringBoot中关于Excel的导入和导出
- 从零开始搭建神经网络并将准确率提升至85%
- Unity3D 脚本模板插件
- Java的括号使用规则_java编码规范
- 2021年认证杯SPSSPRO杯数学建模D题(第一阶段)停车的策略全过程文档及程序
- 公司估值与财务分析指标
- 顶部标题栏的布局设计
- IntelliJ IDEA现有项目连接SVN(2)
- 视频号拍摄技巧和制作方法有哪些?
- 计算机研究生院校全国排名2015,2018年武书连中国大学排行榜(完整版)_计算机考研院校...
- 人立方六度搜索的界面设计的来龙去脉
- 跟我学springboot(二十五)springboot-过滤器之拦截不需要走过滤器的链接使用方法
- delphi 获取本机IP地址和MAC地址
热门文章
- python制作萝莉御姐语音包
- 富士W系列服务器,怀念一下曾经的FUJI GA645W
- 计算机正确e mail,电子邮件(E-mail)是____
- iphone7测试软件,iphone7跑分成绩
- 如何做出一份赏心悦目的PPT
- [算是原创否?]Arch Linux 下的BRAS配置方法 (感谢hellwolf学长!)
- 网络货运系统源码 网络货运平台源码,货运APP源码 货物运输管理源码
- MongoDB详解(一)
- SS00003.elasticsearch——|HadoopElasticSearch集中式日志分析系统.v03|——|Elasticsearch.v03|
- 数字万用表测试直流电流注意事项