目录
3、看官网参考文档—–实例化容器(或者说配置文件和实体类我们都写齐全了,怎么组装到一起,让它们起作用,运行起来?)
在看这个文章之前,对SpringFramework没有了解的,可以看一下我的上一篇文章:
1、看官网的参考文档—–简单理解Spring容器
我们看SpringFramework的参考文档,优先看它的核心的内容,我本人使用的是Edge浏览器,自带的有翻译功能,我就将网页翻译成了中文版。下面是核心内容所在的网页链接:
核心技术 (spring.io)
https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#spring-core
先贴两张官网上面参考文档翻译后的截图:
在上面的图中, 显示Spring容器或者说是SpringIOC将我们的Bean对象(
POJOs或者干脆就是我们的 实体类,比如Student类等,
使用专有名词显得我们更专业!
)和配置文件(XML文件)加载进来,经过映射操作以后,帮助我们实例化Bean对象,使得我们可以直接使用Bean对象,
不需要用最原始的 new方
式。
这个就是我们所说的 工厂模式。
2、看官网参考文档——-了解配置文件,即XML文件
下面的代码是SpringFramework的XML配置文件最基本的格式(主要就是头格式):
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- more bean definitions go here -->
</beans>
解释一下XML文件:首先是头格式,也就是XML文件最开头的我们看不懂的那些http链接;这些头格式链接是一定要有的,
因为头格式规定了
可以使用那些标签,标签中有哪些属性,标签之间的嵌套方式,有的甚至还包含了标签之间的先后顺序;
在上面的基本SpringFramework的XML配置文件中,主要就是bean标签:bean标签的id属性值是一个字符串,是惟一的,也就是一个bean标签与id值是一一对应的关系;
bean标签的class属性值也是一个字符串,但是这个字符串必须使用全限定类名,也就是与Bean标签相关联的那个类的全限定类名
,例如:com.xxx.xxx.xxx
3、看官网参考文档—–实例化容器(或者说配置文件和实体类我们都写齐全了,怎么组装到一起,让它们起作用,运行起来?)
还是先看一下官网的截图:
ApplicationContext是Spring IOC的接口,它有几个实现类,但是我们常用的实现类可能就是只有一个而已;
就像上面的图片一样,我们可以使用这个接口的实现类,将我们编写好的XML配置文件的名字(
当然,这些配置文件都是直接写在 Resources资源目录下的,如果还有文件夹的嵌套,应该是需要加上路径的 也就是 类路径
) 通过构造方法传过去;
下面我记录一下我使用的过程:
首先我写了一个实体类,这个实体类的路径是:org.example.service.UserService
然后需要写一个配置文件,这个配置文件的文件名可以任意,但是后缀名必须是.XML,我放在了Resources资源目录下;
实体类的代码这里我就不粘贴了,它只有一个test方法。
下面是XML配置文件 spring.xml 的代码:
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 下面我们定义一个 Bean对象
id是Bean对象的唯一标识符;class是需要被实例化的Bean对象的路径
-->
<bean id="userService" class="org.example.service.UserService">
</bean>
</beans>
然后我们就需要有一个Main方法,
因为Main方法是程序执行的入口
嘛,在Main方法中,我们要通过代码使得容器运行起来,组装好;
Main方法的代码如下:
import org.example.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Starter {
public static void main(String[] args) {
//首先我们得到 Spring的上下文环境, 也可以说是 Spring IOC, 拿到我们的环境
ApplicationContext ac= new ClassPathXmlApplicationContext("spring.xml");
//下面我们得到需要被实例化的对象 getBean(id):这里的id表示我们 spring.xml文件中Bean标签的id属性值
UserService userService= (UserService) ac.getBean("userService");
//上面需要我们进行一下强制转换 getBean返回的是一个 Object类型, 这个类型是所有类的父类
//下面我们调用一下方法, 可以调用方法就说明底层已经帮助我们实例化了
userService.test();
}
}
注意看我代码上面的注
释;
这里我们使用的ApplicationContext接口的实现类是 ClassPathXmlApplicationContext
从名字上就可以看出来,是 类路径的意思;
它还有另一个实现类:FileSystemXmlApplicationContext 名字上可以看出来它是文件系统,也就是当我们的XML配置文件在本地电脑的某一个位置的时候,我们可以使用这个文件的绝对路径,
但是我们想想就知道,有谁会将一个系统的配置文件不放在代码文件夹下,而是放在本地电脑的某一个地方呢
? 这个类几乎是不用的,了解就行啦;
后面我们就可以调用ApplicationContext对象的getBean方法,参数是Bean标签的id属性值,调用这个方法以后,我们就可以得到一个实例化好的对象(
发现没有,我们不用去new了
)
然后调用这个对象的test()方法后,可以正常运行,
也没有报空指针异
常。
这里
我再多说一下:ApplicationContext的父接口是BeanFactory接口,也就是说:在我们上面的Main方法的代码中,我们将ApplicationContext接口换成BeanFactory接口也是可以的。但是毕竟BeanFactory是父接口,提供的功能可能没有那么强
大
然后呢,还有:
如果我们有多个XML配置文件在Resources资源目录下
,在new ClassPathXmlApplicationContext()的时候,我们可以将全部的XML文件的文件名(包含后缀名)一个一个的写在里面,使用逗号隔开就行啦;这一点我们通过看这个类的构造方法也是可以看出来的(按着Ctrl键,点击这个类就会在IDEA中进到这个类的代码中去);
最后,我这里没有粘贴POM文件的依赖,使用的是Maven工程,如果有读者想验证一下的话,注意我引入的包, 当使用这个类飘红的时候,使用IDEA快捷键将依
赖导入就可以啦!
写的可能有许多瑕疵,欢迎批评指正,感谢支持!!!