点进来你就是我的人了
博主主页:戳一戳,欢迎大佬指点!
目录
1. 创建 Spring 项目
2. 创建一个 普通 Maven 项目
3. 添加Spring框架支持
4. 添加启动类
5. 存储Bean对象
5.1 添加配置文件
5.2 创建Bean对象
5.3 注册Bean
6. 获取并使用Bean对象
1. 先获取Spring上下文对象
ApplicationContext 和 BeanFactory 的区别?(经典面试题)⭐⭐⭐
2. 获取 Bean(根据上下文对象提供的 getBean 方法)
(1) 通过 Bean id 来获取
(2) 通过类型来获取
(3) 通过 id + 类型来获取 (推荐写法)
7. 总结 Spring 的创建和使用
引言:
学习过上篇文章初识Spring后,我们知道Spring 就是⼀个包含了众多⼯具方法的 IoC 容器。它具备两个最核心的功能:将对象(Bean)存储到容器(Spring)中;从容器(Spring)中将对象(Bean)取出来。
接下来使用Maven方式来创建一个Spring项目,创建Spring项目和Servlet类似,总共分为以下三步:
依次点击File→New→Project,选择左侧的Maven项目,点击Next,然后填写项目名称,点击Finish,至此一个maven项目就创建好了,这里和前面servlet的创建maven项目是一样的,
不懂可以参考【Servlet 基础】,配置国内源可以参考【将maven源改为国内阿里云镜像】
创建好后配置一下国内源(就是常说的镜像Maven),这样的话就不会到国外仓库去下载依赖,他会在国内下载,下载更快而且不容易出错;如果我们是在国外仓库下载的话网不好就会很慢,而且还很容易出错(如果你有一次没下好,那么后面再下的时候,他就会以为你下过这个依赖了,就不下了,其实你下的依赖是残缺的,根本运行不了)
大家可以去中央仓库拉取, 也可以直接复制下面代码粘贴到 Spring 项目中 pom.xml 下
在pom.xml中添加Spring的框架支持,xml配置如下:
org.springframework
spring-context
5.3.27
【注意事项】
我们在添加完依赖时, 一定要切记点击 IDEA 右边 maven 的 Reload, 如果 IDEA 项目中出现下图中相关依赖信息, 则表示添加依赖成功了.
第一次添加需要在项目中添加Spring配置文件 (只需要第一次添加即可)
在resources
目录下创建一个spring-config.xml(此文件名可以为别的,建议为spring-config)
Bean对象就是Java中普通的对象,这里我们创建一个Student类
将创建好的Bean对象通过配置文件注册到Spring中
beans>
1. 一个这样的 bean 标签, 就表示我们要将一个 bean 对象托管到 Spring 中.
2. 此处的 id 就相当于寄快递时填写的电话号码, 因为我可能要托管多个 bean 对象到 Spring 中, 当我去获取对象的时候, 就需要根据这个 id 来取; 然后 class 就相当于是寄包裹时填写的地址.
id : 标识, 取对象 (bean) 使用 class : 存储 bean 位置 (包名 + 类名 -> 定义到唯一对象)
3. id 的名字可以随便取, 此处是为了词达意, 你取zhangsan, lisi 都没关系, 只是合法不合理.
经过以上操作, 我的 bean 对象是否已经存储到 Spring 中了呢 ?
其实并没有, 上述操作只是声明了我要存储对象到 Spring 当中. 当程序正儿八经的执行的时候, Spring 采用的是懒加载(单例模式中的懒汉模式), 在启动 Spring 项目的时候, 它不会立即的去将 bean 存储到 Spring 中, 这是它实现上的一个策略, 这也是广义上和狭义上的一个区别, 就类似于并发和并行两者之间的区别一样, 初学的时候, 站在广义的角度上便于理解.
使用Spring上下文的方式获取Bean对象
public class App {
public static void main(String[] args) {
//1,得到Spring
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
//2.从spring容器中获取 Bean 对象 ,此处的"student" 必须和spring-config.xml配置中的Bean的id保持一致
//getBean的返回类型为Object,所以强转一下
Student student =(Student) context.getBean("student"); //该行代码就是实现IOC思想的DI操作
//3.使用Bean对象(非必须,也可以获取不用)
student.sayHi();
}
}
除了这种方法可以拿到 Spring 上下文对象之外, 我们还可以使用 BeanFactory 来作为 Spring 上下文对象. 使用 ApplicationContext 或者 BeanFactory 来获取 Spring 上下文对象, 是同样的效果, 只不过 ApplicaitonContext 是 BeanFactory 的一个子类.
BeanFactory beanFactory =
new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
相同点: 都可以实现从容器中获取bean,都提供了getBean的方法。
不同点:
//根据上下文提供的方法获取bean对象
Student student =(Student) context.getBean("student");
//通过类型获取bean对象
Student student =context.getBean(Student.class);
虽然写法简单,但是容易出问题,当同一个类型被注入 Spring 中多次(多个)的时候,就会报错
这种是最安全的写法,不会出现像上面那种情况,但是id要对应上
//通过id+类型获取bean对象
Student student =context.getBean("student",Student.class);
此种方式是为了解决使用class获取bean时存在多个相同类型的bean对象,此时加上id(因为id的唯一性)就可以获取唯一的bean对象,当相同的类多次注入到spring容器中时,此时多个相同类型的bean对象各不相同(每个bean都有其唯一的地址)
1. 创建 Spring 项目, 相当于得到容器.
- 创建⼀个普通 Maven 项⽬
- 添加 Spring 框架⽀持(添加 spring-context 依赖 )
- 创建一个启动类并添加main(作用: 为后面从 Spring 容器中获取 bean 做准备)
2. 存储 bean 对象
- 创建 bean
- 将 bean 对象注册到 Spring 配置文件中 (spring-config.xml)
3. 读取 bean 对象
- 拿到 Spring 上下文 对象
- 通过 Spring 对象 getBean 方法 获取到 bean 对象 【 DI 操作】
- 使用 bean 对象 (非必须)