作者:有只小猪飞走啦
博客地址:https://blog.csdn.net/m0_62262008?type=blog
内容:存储Bean对象,再在Spring中获取Bean对象,对其进行使用。
本博客内容是小博主在学习之后的总结,如果哪里有错误或者不太完善的都可以私聊我哈,如果哪里你不太理解的也可以来私聊我哦~
我们可以总结一下,存储Bean对象需要以下两步:
那我们一一来实现一下以上的步骤:
package com.tom;
public class User1 {
public void sayHi(){
System.out.println("Hi,Spring~");
}
}
我们可以看到,所谓的Bean,其实就是Java语言中一个普通的对象。
在创建好的项⽬中添加 Spring 配置⽂件 spring-config.xml,将此⽂件放到 resources 的根⽬录下,如下图所示:
Spring 配置⽂件的固定格式为以下内容:
<?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">
</beans>
再将 User1 对象注册到 Spring 中就可以,具体操作是在 中添加如下配置:
<bean id="user1" class="com.tom.User1"></bean>
注意:上面添加的配置中id必须是小写的。
获取并使⽤ Bean 对象,分为以下 3 步:
那下面我们来一一操作一下上面的步骤:
顺便复习一下,什么是Spring应用上下文?
简单地说:应用上下文即是Spring容器的一种抽象化表述,而我们常见的ApplicationContext本质上说就是一个维护Bean定义以及对象之间协作关系的高级接口。我们都知道Spring的本质是一个IoC容器。而容器并不唯一,框架本身就提供了很多个容器的实现,大概分为两种类型:一种是不常用的BeanFactory,这是最简单的容器,只能提供基本的DI功能;还有一种就是继承了BeanFactory后派生而来的应用上下文,其抽象接口也就是上面提到的的ApplicationContext,它能提供更多企业级的服务,例如解析配置文本信息等等。
Spring提供的多种类型容器:
(1) AnnotationConfigApplicationContext:从一个或多个基于java的配置类中加载上下文定义,适用于java注解的方式;
(2) ClassPathXmlApplicationContext:从类路径下的一个或多个xml配置文件中加载上下文定义,适用于xml配置的方式;
(3)FileSystemXmlApplicationContext: 从文件系统下的一个或多个xml配置文件中加载上下文定义,也就是说系统盘符中加载xml配置文件;
(4)AnnotationConfigWebApplicationContext: 专门为web应用准备的,适用于注解方式;
(5)XmlWebApplicationContext: 从web应用下的一个或多个xml配置文件加载上下文定义,适用于xml配置方式。
上面说了这么多,就是为了让我们更加理解Spring,下面我们来得到Spring的上下文-----》
Spring 上下⽂对象可使⽤ ApplicationContext,实现代码如下:
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App3 {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("spring-config.xml");
}
}
注意:(1)得到 Spring 的上下⽂对象,创建的时候需要配置 Spring 配置信息
(2 )spring-config.xml 一定要写对,如下:
把它复制粘贴过来即可。
除了 ApplicationContext 之外,我们还可以使⽤ BeanFactory 来作为 Spring 的上下⽂,如下代码所示:
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
public class App3 {
public static void main(String[] args) {
BeanFactory beanFactory =
new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
}
}
ApplicationContext 和 BeanFactory 效果是⼀样的,ApplicationContext 属于 BeanFactory 的⼦类。
import com.tom.User1;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App3 {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("spring-config.xml");
User1 user1 = (User1) context.getBean("user1");
}
}
注意:这里getBean括号里的内容要和上面配置中的”user1“要一致,如下:
import com.tom.User1;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App3 {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("spring-config.xml");
//User1 user1 = (User1) context.getBean("user1");
User1 user1 = context.getBean(User1.class);
}
}
和第一种方法对比,我们可以发现,这里的context不需要强转为User1,为什么呢?
因为User1.class中有User1的路径,而根据名称的不知道其类型,所以要把其强置为User1的类型。
import com.tom.User1;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App3 {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("spring-config.xml");
User1 user1 = context.getBean("user1",User1.class);
}
}
一般会这样使用来获取Bean对象。
import com.tom.User1;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class App3 {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("spring-config.xml");
User1 user1 = context.getBean("user1",User1.class);
user1.sayHi();
}
}
运行结果:
以上就是Bean对象的存储、获取和使用的全部过程,希望对你有帮助!
关注小猪,小猪带你一起学习~
下期再见啦!