Spring的使用

Spring具有两个最基本的功能

  1. 将对象存储到IOC容器(Spring)中
  2. 将对象从容器中取出来

1. 存储Bean对象

在Java中对象也叫做Bean

  1. 存储Bean之前,要先有Bean才行,所以要先创建一个Bean对象
public class User {
	public void sayHi(String name) {
		System.out.println("hello:" + name);
	}
}
  1. 将创建的Bean注册到Spring容器中

我们需要在项目的resources中添加Spring的配置文件spring-config.xml,Spring配置文件中的内容是固定的,如下所示:


<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 http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

beans>

接下来将要存入容器的Bean对象写入xml中
作用:告诉Spring在启动加载的时候,捎上这个Bean对象,将Bean对象存入容器中


<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 http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
	
       <bean id="user" class="User">bean>
beans>

注入Bean对象中的 id属性就类似于IP的域名,而class属性就类似点分十进制的IP,因为在class属性是“包名+类名”,在实际项目中包会非常多,对程序员不友好,因此使用id属性就相当于给这个Bean对象取了个别名。

2. 获取并使用Bean对象

  1. 得到Spring上下文(即Spring)对象,因为对象都交给Spring管理了,所以获取对象要从Spring中获取,那么就要先得到Spring上下文。
  2. 通过Spring上下文,获取到某一个Bean对象
  3. 使用Bean对象
public class App {
	public static void main(String[] args) {
		//1. 得到Spring的上下文对象,需要写上Spring配置信息的名称
		ApplicationContext context =
			new ClassPathXmlApplicationContext("spring-config.xml");
		//2. 通过Spring对象,获取到Bean对象
		//根据id属性来取Bean对象
		User user = (User) context.getBean("user");
		//3. 使用Bean对象
		user.sayHi("张三");
	}
}

2.1 获取Spring上下文的两种方式

上面是较优的写法,下面介绍的方法是过时的方法

BeanFactory beanFactory = 
	new XmlBeanFactory(new ClassPathResource("spring-config.xml"));

面试题:ApplicationContext和BeanFactory的区别

  1. 从继承关系上看:ApplicationContext是BeanFactory的子类,除了具有BeanFactory的所有功能,他还拥有其他特性,如国际化支持,资源访问支持,事件传播的支持
  2. 从性能上看:BeanFactory诞生比较早,当时硬件资源比较稀缺,因此他加载Bean对象的方式是懒汉模式,性能较低;而ApplicationContext是一次性加载并初始化所有Bean对象,性能更高。
2.2 获取Bean对象的三种方法
  1. 在上面的代码中是通过id属性来获取的,得到的是Object对象需要强转,这就有可能出现两种情况(1)获取到的对象为Null,再去强转;(2获取到的Bean对象可能是其他对象,强转时会出现问题。
  2. 我们可以通过对象类型来获取Bean。
User user = context.getBean(User.class);

可能出现的问题
Spring的使用_第1张图片

  1. 推荐写法:id+对象类型都写
User user = context.getBean("user", User.class);

你可能感兴趣的:(Spring家族,spring,java,后端)