IDEA社区版搭建Spring工程(01-基础框架搭建)
创建Spring项目
- IDEA打开New Project-Maven Archetype,选择Archetype:org.apache.maven.archetypes:maven-archetype-quickstart
-
IDEA更换国内源,Maven可以配置aliyun镜像(这里略)
-
添加 Spring 依赖
这里选择当前spring-4的最新版本,也可以选择其它版本(https://mvnrepository.com/artifact/org.springframework/spring-core)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.30.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.30.RELEASE</version>
</dependency>
运行第一个 Spring 项目
- 这个模板里已经包含了main方法启动类,还需要新建
resources
文件夹
- 新建一个测试学生类
package org.example;
public class Student {
public Student(){
System.out.println("no-args");
}
public Student(String arg){
System.out.println(arg);
}
public void print(String str) {
System.out.println(str);
}
}
- 将Bean注册到Spring项目上下文
需要在resources
中新建一个XML文件并写入如下代码,文件名可以设为spring-config.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"
xmlns:content="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
</beans>
在XML文件中加入bean注册信息:<bean id="student" class="org.example.Student"/>
- 将 Bean 对象从 Spring 上下文中取出来使用,执行run命令。
public static void main( String[] args )
{
System.out.println( "Hello World!" );
// 获取 Spring 的上下文对象
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
// 获取 Bean 对象
Student student = context.getBean("student", Student.class);
// 使用 Bean 对象
student.print("hello world");
}
查看执行结果
思考
- Bean类是否有更方便的注册发现方式?
可以采用扫描配置:<content:component-scan base-package="org.example"/>
- 为什么通过spring容器管理bean比较好?
解耦。通过spring容器管理和初始化bean,方便统一使用,避免一点改动多处修改的麻烦。
- 通过ApplicationContext和BeanFactory获取 Spring 上下文对象有什么区别和相同点?
// 1. 得到 spring 上下文对象
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
// 2. 根据上下文对象提供的方法获取到 bean
User user = (User) beanFactory.getBean("user");
相同点:都有getBean
方法,从容器中获取bean对象。
不同点:
- ApplicationContext 属于 BeanFactory 的子类,BeanFactory 只提供了基础访问Bean的方法,而 ApplicationContext 除了拥有 BeanFactory 的所有功能之外,还拥有一些独立的特性,比如对国际化的支持、资源访问的支持、以及事件和传播等方面的支持。
- 从性能方面来说二者是不同的,BeanFactory是按需加载,它很像单例模式中的懒懒汉模式,当我们需要用到了某个bean对象,它才会临时加载。
然而,ApplicationContext是饿汉模式,在我们创建此类的时候,它会一次性地将所有的 bean 对象都加载起来,以备后续使用。
生生不息