上一篇我们介绍了Spring的概念,知道了Spring是众多工具方法的IoC容器。
但是纸上谈兵终觉浅,这一篇文章就来介绍Spring创建与使用,
== 注之后我们对对象的称呼就叫Bean==
1.1Spring项目的创建与配置
1.创建maven项目,语言选java,项目类型选择maven,jdk推荐1.8及以上,一路next即可
2.在pom.xml目录下导入以下依赖并刷新下载
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
注:标签要在标签下才正确
添加的框架有:
spring-context:spring 上下文
spring-beans:管理对象的模块
3.在resources目录下创建任意名称(最好是有意义name)的xml文件并导入依赖,记得刷新下载依赖。
复制以下内容到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"
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>
1.2将对象注册到Spring中
1.任意创建两个类,一个类App负责执行main函数,另一个User注册到Spring中
public class User {
public void fun(){
System.out.println("我是User类的fun方法");
}
}
public class App {
public static void main(String[] args) {
}
}
2.将User对象注册到Spring中
在我们resources目录下的xml文件的标签下中加上这一句:
<bean id="user" class="User"></bean>
这样就注册了一个User对象到Spring中了● 针对class属性我们可能会遇到不同包下相同的类名,这时我们就要唯一定位到某一个类,可以采用包名.类名的形式
● 这里这是注册,还没有真正将对象存入,就相当于清单,Spring存对象是要根据这个清单内容来存对象。
3.从Spring取出User对象
在App的main方法中:调用以下代码
public static void main(String[] args) {
//获取Spring上下文对象 ClassPathXml:根据xml的路径 所以参数为我们resources内的xml文件
ApplicationContext context=
new ClassPathXmlApplicationContext("spring-config.xml");
//使用该类获取对象的方法--输入对象id 返回的Object需要强转
User user=(User) context.getBean("user");
//检查是否正确获得对象
user.fun();
}
当然获取对象不只是输入id,还可以通过类对象来获取。
User user=(User) context.getBean("user");
通过类对象有个好处,不用再强制类型转换了。
缺点就是如果我再给xml加入有个User对象就会报错,就像这样:
● 在xml再添加一个User对象:
<bean id="user1" class="User"></bean>
● 执行代码:
User user1=context.getBean(User.class);
user1.fun();
● 得到报错:
注意看,异常名称:NoUniqueBeanDefinitionException(没有找到唯一的对象)
解决方法很简单,既然二者都有缺点,那我们就全都要!
User user2=context.getBean("user1",User.class);
该方法就结合的二者优点,推荐使用哦!
4.运行检查结果:
正确:
一般错误就是报以下异常:
NoSuchBeanDefinitionException
这时就要注意自己getBean方法的id是否和xml里面的匹配,大概率是这个问题引发的异常。
1.3补充说明
创建Spring上下文对象时,除了 ApplicationContext 之外,我们还可以使⽤ BeanFactory 来作为 Spring 的上下文。
BeanFactory beanFactory=
new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
User user=(User) beanFactory.getBean("user");
user.fun();
他们两个的效果是一样的,ApplicationContext属于 BeanFactory的子类
这里对此有个常考面试题:
1.3.1常考面试题
ApplicationContext VS BeanFactory(常⻅⾯试题)
● 继承关系和功能⽅⾯来说:Spring 容器有两个顶级的接⼝:BeanFactory 和
ApplicationContext。其中 BeanFactory 提供了基础的访问容器的能力,⽽ ApplicationContext属于 BeanFactory 的⼦类,它除了继承了 BeanFactory 的所有功能之外,它还拥有独特的特性,还添加了对国际化支持、资源访问支持、以及事件传播等⽅⾯的支持。
● 从性能⽅⾯来说:ApplicationContext 是⼀次性加载并初始化所有的 Bean 对象(饿汉),
而BeanFactory 是需要那个才去加载那个(懒汉),因此更加轻量
总结
1.先得到容器
2.对象存入容器
创建Bean类(普通类)
然后在xml上进行注册,等待Spring存入容器
3.从容器取出对象
得到 Spring 上下⽂,读取到 Spring 的配置文件(xml)
getBean方法获取对象
4.使用对象
调用对象的方法等等
本篇文章介绍了Spring项目创建配置,和如何存储对象,下一篇文章我将向大家讲述如何更加快速高效的存取对象,希望大家多多点赞关注!