上手Spring当然也要从HelloWorld项目开始。
过去我们创建一个Java对象要从new关键字开始,今天我们不使用new关键字也能创造出Java对象(实例)!
检查环境
- JDK1.8
- Maven
- Idea集成开发环境
以上环境的安装较为基础,在此不过多叙述。详情可以百度
初始化项目
-
新建Maven项目
我们不选择Maven提供的各种项目模板,使用Maven空项目,直接next,为项目起名01HelloSpring,选择项目存放地址,完成新建Maven项目 -
在Pom.xml文件中引入以下依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.6.RELEASE</version>
</dependency>
</dependencies>
- 保存pom文件,等待maven工具下载相关依赖包,查看Maven工具是否完成下载。
在Idea右侧有一个Maven标签卡,打开标签开即可看到该maven项目已经加入的依赖,如果你的项目出现以下依赖,则证明导入成功
编写HelloWorld类
- 在src-main-java文件夹下新建包
com.zhp
- 新建HelloWorld类
public class HelloWorld {
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("Your Message : " + message);
}
}
编写主程序
在com.zhp
包下创建MainApp类,作为项目入口
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");//读取Bean装配配置文件
HelloWorld helloWorld =(HelloWorld) context.getBean("helloWorld");//获取java bean(获取实例)
helloWorld.getMessage();//打印
}
}
- 第三行:Spring有一种能力,就是通过xml配置文件来创建java实例,xml文件中写明了属性和值,这样就可以通过配置文件创建并初始化java对象了。初学者肯定有疑问,为什么要这么麻烦,我之前直接new出来不是更简单吗,现在虽然不用new对象了,但是还要写xml配置文件,好像也没有简化操作啊。如果有以上的疑问,可以看我的另一篇博文。该篇博文从我们最熟悉的new关键字逐步讲解为什么会发展成使用配置文件新建对象。
- 第四行:使用xml上下文context,获取HelloWorld对象
- 第五行:调用方法
编写配置文件
在src-main-resource下编写xml文件Beans.xml,有两点需要注意
- 一定要在src-main-resource下,因为在MainApp的第三行,读取的路径是根路径,而maven配置文件的根路径是src-main-resource
- 文件要与MainApp中第三行同名
现在我们就可以编写配置文件了
<?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 id="helloWorld" class="com.zhp.HelloWorld">
<property name="message" value="Hello World!"/>
</bean>
</beans>
这个文件同样有三点需要注意
- bean标签的id要与MainApp的第四行中的参数同名
- bean标签的class要与HelloWorld类的位置保持一致,如果你更换了包名,一定要注意修改这里
- property是bean的子标签,该标签是注明java属性,所以其name的值要与java属性的名字一致,这样spring才能将value值注入到对应属性中。
运行
思考
如果我再获取一个helloworld bean,我们叫他bean2,bean2与bean1会指向同一块内存吗?
验证
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");//读取Bean装配配置文件
HelloWorld helloWorld =(HelloWorld) context.getBean("helloWorld");//获取java bean(获取实例)
helloWorld.getMessage();//打印
HelloWorld helloWorld2 =(HelloWorld) context.getBean("helloWorld");
System.out.println(helloWorld.hashCode());
System.out.println(helloWorld2.hashCode());
}
}
结果
Spring目前为止是一个单例系统!