上周把话撂出来,看起来小伙伴们都挺期待的,其实松哥也迫不及待想要开启一个全新的系列 。
但是目前的 Spring Security 系列还在连载中,还没写完 。连载这事,一鼓作气,再而衰三而竭,一定要一次搞定,Spring Security 如果这次放下来,以后就很难再拾起来了 。
所以目前的更新还是 Spring Security 为主,同时 Spring 源码解读每周至少更新一篇,等 Spring Security 系列更新完毕后,就开足马力更新 Spring 源码 。其实 Spring Security 中也有很多和 Spring 相通的地方,Spring Security 大家文章认真看,松哥不会让大家失望的!
1.从何说起Spring 要从何说起呢?这个问题我考虑了很长时间 。
因为 Spring 源码太繁杂了,一定要选择一个合适的切入点,否则一上来就把各位小伙伴整懵了,那剩下的文章估计就不想看了 。
想了很久之后,我决定就先从配置文件加载讲起,在逐步展开,配置文件加载也是我们在使用 Spring 时遇到的第一个问题,今天就先来说说这个话题 。
2.简单的案例先来一个简单的案例,大家感受一下,然后我们顺着案例讲起 。
首先我们创建一个普通的 Maven 项目,引入 spring-beans 依赖:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.2.6.RELEASE</version></dependency>
然后我们创建一个实体类,再添加一个简单的配置文件:
public class User { private String username; private String address; //省略 getter/setter}
resources 目录下创建配置文件:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean class="org.JAVAboy.loadxml.User" id="user"/></beans>
然后去加载这个配置文件:
public static void main(String[] args) { XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("beans.xml")); User user = factory.getBean(User.class); System.out.println("user = " + user);}
这里为了展示数据的读取过程,我就先用这个已经过期的 XmlBeanFactory 来加载,这并不影响我们阅读源码 。
上面这个是一个非常简单的 Spring 入门案例,相信很多小伙伴在第一次接触 Spring 的时候,写出来的可能都是这个 Demo 。
在上面这段代码执行过程中,首先要做的事情就是先把 XML 配置文件加载到内存中,再去解析它,再去 。。。。。
一步一步来吧,先来看 XML 文件如何被加入到内存中去 。
3.文件读取文件读取在 Spring 中很常见,也算是一个比较基本的功能,而且 Spring 提供的文件加载方式,不仅仅在 Spring 框架中可以使用,我们在项目中有其他文件加载需求也可以使用 。
首先,Spring 中使用 Resource 接口来封装底层资源,Resource 接口本身实现自 InputStreamSource 接口:
文章插图
我们来看下这两个接口的定义:
public interface InputStreamSource { InputStream getInputStream() throws IOException;}public interface Resource extends InputStreamSource { boolean exists(); default boolean isReadable() { return exists(); } default boolean isOpen() { return false; } default boolean isFile() { return false; } URL getURL() throws IOException; URI getURI() throws IOException; File getFile() throws IOException; default ReadableByteChannel readableChannel() throws IOException { return Channels.newChannel(getInputStream()); } long contentLength() throws IOException; long lastModified() throws IOException; Resource createRelative(String relativePath) throws IOException; @Nullable String getFilename(); String getDescription();}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 第一次购买羽毛球应该如何挑选
- 茶艺基本知识介绍,中国三峡第四届茶文化艺术节将于15日开幕,茶文化
- 不到五万,搞定你人生第一只钻表
- 第一次去海南旅游应该去哪里
- 茶叶A股第股,14年帕沙古树茶和92年的台地茶对比
- 茶的第功用,白毫茶功用多
- 第一个kafka程序,详谈生产者消费者,顺序消费重复消费问题
- 姜太公为什么自己不封神?
- 淘宝新店流量扶持什么时候开始计算 淘宝新开店铺第几天给流量
- 第二届海峡茶会以,第二届全茶会举办