前言
经过前面的学习,我们已经知道spring就是包含了众多方法的Ioc,那么既然是容器,就具备两个功能,我们接下来就是要介绍以下两个功能:
1.将对象存储到容器(spring)中:
2.从容器(spring)中将对象取出来.
这两个功能就应发出来,spring的创建和使用.
一.Spring创建
我们先来说一些大方向的一个步骤:
创建spring
1.创建一个maven项目
2.增加Spring的框架支持.
3.增加一个启动类(作用:为后面从spring容器获取bean 做准备)
现在具体就开始细节的操作了.
1.1创建一个maven项目
点击下一步之后.
1.2 增加Spring依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.23</version>
</dependency>
</dependencies>
1.3 增加启动类
所谓启动类,就是在java文件目录下建立一个启动类.
public class Application {
public static void main(String[] args) {
}
}
二.存储Bean对象
具体步骤如下:
1.先创建Bean对象.
2.将创造的bean通过spring配置文件(spring-config.xml)注册到容器当中.
2.1 创建Bean
何为Bean,Bean就是Java语言中的一个普通对象,
具体代码入下:
public class Student {
public Student(){
System.out.println("do student init");
}
public void sayHi(){
System.out.println("hi student");
}
}
2.2 将Bean对象注册到容器当中
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>
下面做的操作就是把bean对象注册到Spring容器当中.
<bean id="student" class="com.spring.demo.Student"></bean>
三.读取Bean对象
这一步就是从容器中把东西取出来.
1.得到spring对象(两种方式ApplicationContext、BeanFactory)
2.通过spring对象getBean 方法获取到Bean对象
3.1 得到spring上下文对象.
这里创建上下文对象其实有两种方式.
Spring 上下⽂对象可使⽤ ApplicationContext,实现代码如下:
ApplicationContext context=new
ClassPathXmlApplicationContext("spring-config.xml");
除了ApplicationContext 之外,我们还可以使用BeanFactory 来作为Spring 的上下文,如下代码所示:
BeanFactory beanFactory=new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
当然这两者有什么区别呢?
大家先来看使用上的区别.
最后来个简单的总结,这也是常见的面试题:
继承关系和功能方面来说:Spring容器有两个顶级的接口:BeanFactory和
ApplicationContext。其中 BeanFactory提供了基础的访问容器的能力而 ApplicationContext属于BeanFactory的子类,它除了继承了BeanFactory的所有功能之外,它还拥有独特的特性,还添加了对国际化支持、资源访问支持、以及事件传播等方面的支持。
从性能方面来说:ApplicationContext是一次性加载并初始化所有的 Bean对象,而BeanFactory是需要那个才去加载那个,因此更加轻量。
3.2 通过上下文对象,获取某一个指定的Bean对象
这里获取到Bean对象也有三种方式
1.通过名称获取.
Student student=(Student)context.getBean("student");
2.通过类型方式获取.
Student student=(Student)context.getBean(Student.class);
3.通过名称+类型方式获取.
Student student=(Student)context.getBean("student",Student.class);
3.3 使用Bean对象
public class Application {
public static void main(String[] args) {
ApplicationContext context=new
ClassPathXmlApplicationContext("spring-config.xml");
Student student=(Student)context.getBean("student",Student.class);
student.sayHi();
}
}
总结
-
操作容器之前,先要有容器,所以先要得到容器。
-
存对象
a.创建Bean(普通类)。
b.将 Bean注册(配置)到spring-confing.xml中。 -
取对象
a.得到Spring 上下文,并读取到Spring的配置文件。b.获取某一个 Bean对象。
c.使用Bean对象。
具体的流程图如下: