Spring框架学习day_03:对于读取文件方式的补充/关于spring框架知识点的学习方式
1. 通过Environment读取.properties配置文件
假设在src/main/resources下存在jdbc.properties文件,并且,在该文件中存在若干条配置信息,如果需要读取该文件中的配置信息,可以先创建某个类,在类中声明Environment
接口类型的对象,通过自动装配的方式为该类型对象注入值:
package cn.tedu.spring;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;@Component
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {@Autowiredprivate Environment environment;public Environment getEnvironment() {return environment;}public void setEnvironment(Environment environment) {this.environment = environment;}}
后续,需要读取配置文件中的值时,从以上类中获取Environment
类型的对象,然后,调用该对象的getProperty()
方法即可获取对应的值,例如:
package cn.tedu.spring;import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.core.env.Environment;public class Demo {public static void main(String[] args) {AnnotationConfigApplicationContext ac= new AnnotationConfigApplicationContext(SpringConfig.class);JdbcConfig jdbcConfig = ac.getBean("jdbcConfig", JdbcConfig.class);Environment environment = jdbcConfig.getEnvironment();System.out.println(environment.getProperty("db.url"));System.out.println(environment.getProperty("db.driver"));System.out.println(environment.getProperty("db.username"));System.out.println(environment.getProperty("db.password"));ac.close();}}
Spring阶段小结
【理解】Spring框架的主要作用:创建对象,管理对象;
【理解】Spring框架深层的作用:解耦;
【掌握】通过Spring框架创建对象:
- 在某个类中自定义方法,方法的返回值类型就是需要Spring框架创建对象的类型,在方法体中自行返回所需要创建的对象,并且为方法添加
@Bean
注解,后续,只要Spring框架加载这个类,就会自动调用被添加了@Bean
注解的方法,并管理方法所返回的对象。通常,当需要管理的对象所归属的类不是自定义的,必须使用这种做法; - 使得Spring框架执行组件扫描,保证相关的类在组件扫描的包或其子孙包中,并且,类还需要添加
@Component
/@Controller
/@Service
/@Repository
注解中的某1个。通常,当需要管理的对象所归属的类是自定义的,优先使用这种做法。
- 在某个类中自定义方法,方法的返回值类型就是需要Spring框架创建对象的类型,在方法体中自行返回所需要创建的对象,并且为方法添加
【掌握】关于组件扫描:可以将组件扫描的包的名称作为字符串参数直接应用于
AnnotationConfigApplicationContext
类的构造方法中,但是,并不推荐使用这种做法,在实际项目开发时,AnnotationConfigApplicationContext
类通常不是开发人员自行创建的,也就没有办法在构造方法中添加包的名称!推荐使用自定义的类作为配置类,并结合@ComponentScan
注解来配置组件扫描;【理解】被Spring管理的对象默认是单例的(注意:Spring框架不是设计模式中的单例模式,只是管理对象的方法是这样的),并且,不是懒加载的模式(相当于单例模式中的饿汉式单例的效果);
【了解】使用
@Scope
和@Lazy
调整被Spring管理的对象的作用域;【理解】被Spring管理的对象的生命周期;
【了解】配置对象的生命周期:
- 如果使用的是添加了
@Bean
注解的自定义方法返回对象的做法,在@Bean
注解中配置initMethod
和destroyMethod
属性,就可以将类中的方法分别指定为初始化方法和销毁方法; - 如果使用的是组件扫描和组件注解的做法,在类中的初始化方法之前添加
@PostConstruct
注解,在销毁方法之前添加@PreDestroy
方法。
- 如果使用的是添加了
【理解】关于Spring框架的DI与IoC:
- DI:Dependency Injection,依赖注入,具体的表现就是“为当前类对象所依赖的某个属性注入值”;
- IoC:Inversion of Control:控制反转,在传统模式下,是由开发人员自行创建对象(例如
User user = new User();
)且管理对象(例如user.setName("Jack");
),可以理解为开发人员具有对象的控制权,当使用了Spring框架后,创建对象和管理对象的权力就交给了框架。 - 在Spring框架中,DI是一种做法,IoC是最终实现的效果,也就是“Spring框架通过DI这种做法实现了IoC的效果”。
【理解】Spring框架自动装配机制的2种装配模式:
byName
:根据名称实现自动装配,在这种模式下,要求被装配的属性名称,与被Spring管理的对象的名称(调用getBean()
方法给出的参数名)必须相同;byType
:根据类型实现自动装配,在这种模式,要求被装配的属性的类型,在Spring容器中存在匹配类型的对象,当应用这种机制时,必须在Spring容器中保证匹配类型的对象只有1个,否则,将会出现NoUniqueBeanDefinitionException
异常;
【理解】使用
@Autowired
和@Resource
这2个注解实现自动装配时的区别:- 使用
@Autowired
尝试自动装配时,Spring框架会先根据byType
模式找出所有匹配类型的对象,如果匹配类型的对象的数量为0,也就是没有匹配类型的对象,默认情况下会直接报错(如果明确的配置为@Autowired(required=false)
时不会因为装配失败而出错);如果匹配类型的对象的数量为1,则直接装配;如果匹配类型的对象的数量超过1个(有2个甚至更多个),会尝试byName
来装配,如果存在名称匹配的对象,则成功装配,如果名称均不匹配,则装配失败。 - 使用
@Resource
注解尝试自动装配时,其工作原理是先尝试byName
装配,如果存在名称匹配的对象,则直接装配,如果没有名称匹配的对象,则尝试byType
装配。
- 使用
【掌握】通过Spring框架读取**.properties**配置文件中的信息:
- 在组件类的声明之前添加
@PropertySource
注解,以配置需要读取的**.properties**文件的位置,然后,通过@Value
注解将读取到的属性值一一注入到类的属性中,在声明类的属性时,只要该属性的类型是常规类型(例如基本数据类型、String
等)或Spring框架自定义的类型,都可以将类的属性直接声明为所期望的类型; - 在组件类的声明之前添加
@PropertySource
注解,以配置需要读取的**.properties文件的位置,然后,在类中自定义Environment
接口类型的对象,通过@Autowired
为该对象自动装配值,后续,调用该对象的getProperty()
方法即可获取在.properties**文件中配置的属性值。
- 在组件类的声明之前添加
Spring框架学习day_03:对于读取文件方式的补充/关于spring框架知识点的学习方式相关推荐
- 从零写一个具有IOC-AOP-MVC功能的框架---学习笔记---11. MVC功能之http请求处理器的编写---简易框架最后一公里!
从零写一个具有IOC-AOP-MVC功能的框架-学习笔记 专栏往期文章链接: IOC功能相关章节: 从零写一个具有IOC-AOP-MVC功能的框架-学习笔记-01.项目初始化 从零写一个具有IOC-A ...
- java字节流读取文件_字节流读取文件 java的几种IO流读取文件方式
java字节流怎么读取数据 字节流读取数据例子如下: import java.io.File;import java.io.FileInputStream;import java.io.FileNot ...
- spring boot 项目打成jar包后读取文件问题
java.io.FileNotFoundException: class path resource [xxx.xls] cannot be resolved to absolute file pat ...
- 学习File API用于前端读取文件
1. File API简介 File API对于某些专门的网站的不可或缺的.现在常用它实现对文件的预览等功能. File API规定怎么从硬盘上提取文件,直接交给在网页中运行中的Javascript代 ...
- while和for循环读取大文件三种读取文件方式
目录 While和for循环 读写文件 三种读操作比较 read()读文件 readline()读文件 readlines()读文件 While和for循环 for循环实现猜三次年纪 age = 66 ...
- Spring Boot 学习系列(07)—properties文件读取
此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 传统的properties读取方式 一般的,我们都可以自定义一个xxx.properties文件,然后在工程 ...
- springbatch读取文件_通过例子讲解Spring Batch入门,优秀的批处理框架
1 前言 " 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Spring Batch是一个轻量级的.完善的批处理框架,作为Spring体系中的一员,它拥有灵活.方便.生产 ...
- Gin 框架学习笔记(03)— 输出响应与渲染
在 Gin 框架中,对 HTTP 请求可以很方便有多种不同形式的响应.比如响应为 JSON . XML 或者是 HTML 等. Context 的以下方法在 Gin 框架中把内容序列化为不同类型写 ...
- Spring框架学习笔记09:基于XML配置方式搭建SSM框架实现用户登录
文章目录 一.采用MVC架构 二.用户登录运行效果 三.基于XML配置方式搭建SSM框架实现用户登录 (一)创建数据库与表 - simonshop (t_user) 1.创建数据库 - simonsh ...
最新文章
- mysql的api框架_API接口幂等性框架设计
- C++实用技巧(一)
- 手机耗电统计app_教你 6 招,解决 iOS13 耗电问题
- Easy problem
- 应届生去软通动力怎么样_直播回看!信通院/浪潮/软通智慧…金句频出,看看你错过了什么?...
- linux 修改ip地址 和关闭防火墙设置
- C++内存布局(1)-让new出的两个变量在堆上的地址连续
- centos上TURN服务器搭建及测试
- php版ueditor配置_ThinkPHP配置UEditor
- 【一文讲通】BLDC的六步法PMSM的FOC法综合
- PMP-5.项目范围管理-需求跟踪矩阵
- python3传智播客_3.Ubuntu安装以及配置(传智播客.黑马程序员python学科)
- wps可以用来学计算机考试吗,国产软件WPS成全国计算机二级考试科目,你确定不来学点编程...
- 微信小程序开发|起步-工欲善其事必先利其器
- 怎么样关闭计算机管理员,电脑怎么样使用命令行程序启用和关闭管理员账户 - 今日爆点...
- 【A Unified Model for Multi-class Anomaly Detection, NeurIPS 2022】
- Python编程课程好学吗?能学会吗?
- 做seo为什么要了解网站
- 丁香园技术负责人冯大辉近日在知乎上披露了当年共同创办阿里巴巴的18个合伙人的近况:
- 阿里云服务器华北1、华北2、华北3、华北5地域在哪个城市为什么没有华北4?...
热门文章
- 软件工程概论冲刺 第6天
- [CF816B] Karen and Coffee(前缀和,思维)
- 使用组件构建Android应用程序
- 利用EntLib授权机制实现对ASP.NET页面的自动授权
- 如何解决get和post乱码问题?
- PHP 安装 扩展时 抛出 /usr/local/Cellar/php@7.1/7.1.25/pecl 异常解决
- Adobe Premiere Pro CC 2015.0 已停止工作【解决方案】
- ImportError: /lib64/libc.so.6: version `GLIBC_2.17‘ 问题解决
- 在SpringMVC中使用@RequestBody注解处理json时,报出HTTP Status 415的解决方案
- http-server swagger-editor启动成功后,访问404的解决方法