Spring的创建和使用

本文介绍了如何在Spring框架中创建项目,添加Spring支持,存储和获取Bean对象,以及ApplicationContext和BeanFactory的区别。通过Maven配置和Spring配置文件,展示了如何实现在Spring容器中管理对象并高效使用它们。
摘要由CSDN通过智能技术生成

Spring的创建和使用

Spring 就是⼀个包含了众多⼯具⽅法的 IoC 容器。既然是容器那么它就具备两个最基本的功能:将对象存储到容器(Spring)中;从容器中将对象取出来。
在 Java 语⾔中对象也叫做 Bean,所以后⾯咱们再遇到对象就以 Bean 著称。严格的来说Bean就是能被多次使用的对象

1.创建 Spring 项⽬

接下来使⽤ Maven 方式来创建⼀个 Spring 项目,创建 Spring 项⽬和 Servlet 类似,总共分为以下3步:

  1. 创建⼀个普通 Maven 项⽬。
  2. 添加 Spring 框架⽀持(spring-context、spring-beans)。
  3. 添加启动类。

1.1 创建⼀个 Maven 项⽬

这一步什么都不用配置,直接点击下一步
在这里插入图片描述
在这里插入图片描述

1.2 添加 Spring

在项⽬的 pom.xml 中
添加下列代码

<dependencies>
<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>
</dependencies>

出现下面这样才是执行添加成功,如果没有就点击reload
在这里插入图片描述

1.3 添加启动类

最后在创建好的项⽬ java ⽂件夹下创建⼀个启动类,包含 main ⽅法即可:
在这里插入图片描述

2.存储 Bean 对象

存储 Bean 分为以下 2 步:

  1. 存储 Bean 之前,先得有 Bean 才⾏,因此先要创建⼀个 Bean。
  2. 将创建的 Bean 注册到 Spring 容器中。
    具体实现如下。

2.1 创建 Bean

所谓的 Bean 就是 Java 语⾔中的⼀个普通对象,实现代码如下:
首先需要创建一个包,再把你自己创建的bean对象放到这个包里
在这里插入图片描述
在这里插入图片描述

2.2将bean注册到容器

在创建好的项⽬中添加 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 htt
p://www.springframework.org/schema/beans/spring-beans.xsd">
 
</beans>

接下来,再将 User 对象注册到 Spring 中就可以,具体操作是在 中添加如下配置:
class是你要存储到ioc中的bean的完整路径(包名+类名),你创建的包是啥,你就在class后面写上包名.bean名
这个id是你给当前存入到spring中的bean起的名字

<bean id="user" class="springdemo.User"></bean>

总的就是

<?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">
    <bean id="user" class="springdemo.User"></bean>
</beans>

以上步骤完成之后,只是一个声明,并没有真的把bean对象放到ioc容器中,而是在你调用相关方法的时候才会真正的去存,声明就是告诉容器下次有人调用我的时候我在过来
但是从语义(浅层)来理解就是存储到spring中了,从深层理解就相当于懒汉模式,调用的时候再存储使用

3.获取并使用Bean 对象

获取并使⽤ Bean 对象,分为以下 3 步:

  1. 得到 Spring 上下文对象,因为对象都交给 Spring 管理了,所以获取对象要从 Spring 中获取,那
    么就得先得到 Spring 的上下文。
  2. 通过 Spring 上下文,获取某⼀个指定的 Bean 对象。
  3. 使用 Bean 对象。
  4. 如果取多个 Bean 的话重复以上第 2、3 步骤。

3.1创建 Spring 上下文

Spring 上下⽂对象可使⽤ ApplicationContext,实现代码如下:

// 1.得到 Spring 的容器(上下⽂)对象,创建的时候需要配置 Spring 配置信息
ApplicationContext context = new ClassPathXmlApplicationContext("spring-con
fig.xml");

3.2获取bean对象

 //2.得到bean
        context.getBean("user");//user就是你之前设置的id

在这里插入图片描述

3.3使用bean对象(非必须)

user.sayHi("小白");

总的代码

public class App
{
    public static void main(String[] args) {
        // 1.得到 Spring 的容器(上下⽂)对象,创建的时候需要配置 Spring 配置信息
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        //2.得到bean[依赖查找-->IoC的一种实现]
        //也就相当于现在调用这个bean了,然后把这个bean放到容器里面,再给这个user对象,因此我们就不需要自己new一个新的对象了,直接从容器里面取就行了
        User user=(User)context.getBean("user");//user就是你之前设置的id
        //3.使用bean(非必须)
        user.sayHi("小白");
    }
}

在这里插入图片描述
如果你后续要改在这里插入图片描述
这个文件的名字,也可以实现,你只要保证这个文件存在即可

3.4得到上下文对象的另一种方式(BeanFactory)

   //1.获取上下文对象
        BeanFactory context=new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
        //2.获取bean
        User user=(User) context.getBean("user");
        //3.使用bean
        user.sayHi("小白");

ApplicationContext VS BeanFactory有什么区别?
相同点:都是容器管理对象,都可以获取Bean对象。
区别:
1.ApplicationContext属于BeanFactory的子类,ApplicationContext拥有更多功能(国际化支持、资源访问支持、以及事件传播等方面的支持…)。
2.加载Bean机制不同:BeanFactory是早期的加载bean对象的方式,由于早期内存缺乏,因此BeanFactory懒加载,按需加载(使用一个Bean加载一个Bean)
ApplicationContext使用靠后,使用ApplicationContext的时候内存已经非常富裕了,因此ApplicationContext一次性加载所有Bean对象。
因此ApplicationContext启动比较慢(内存占用大),因为启动的时候是加载所有bean对象的,但是它的性能很快,也就是说启动之后获取对象非常快,因为不用现成加载新的对象了,而BeanFactory正好相反启动快(内存占用小),但是后期的获取慢
在这里插入图片描述
在这里插入图片描述

3.5 getBean 方法的更多用法

1.跟据名称获取Bean对象(也就是上面代码展示的)
在这里插入图片描述
2.跟据类型获取Bean对象

 User user=context.getBean(User.class);//不需要强制类型转换

这个方法有可能有问题,如果你只有一个User类型注入到ioc里面,那么没问题,如果有多个,就会有问题了,报错如下
在这里插入图片描述

比如我是个老师,我叫穿白衣服的同学回答问题,那么我具体叫的是哪个穿白衣服的呢?可能有很多个穿白衣服的同学
这个问题目前是无解的

3.根据名称+类型来获取的
这种方法比较保险,最推荐的

User user=context.getBean("user",User.class);
//也不需要进行强制类型转换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Spring Initializr可以方便地创建Spring Boot项目。首先,你需要访问Spring Initializr的网站,并按照需求选择项目类型(Maven或Gradle)、Spring Boot的版本,并填写项目元数据以及所需依赖。然后,点击下一步,完成项目的创建。接下来,你需要配置Maven或Gradle,并等待所需的依赖包下载完成。在项目中,你可以创建一个Controller类,编写一个Hello World的方法。运行Spring Boot的启动类,控制台显示Spring即表示启动成功。最后,你可以在浏览器中访问http://localhost:8080/hello来验证项目是否成功运行。通过Spring Initializr创建Spring Boot项目通常会自动生成主程序、配置文件和测试类等标准内容。123 #### 引用[.reference_title] - *1* *3* [使用Spring Initializr创建Spring Boot工程](https://blog.csdn.net/danlan_shiguang/article/details/124681388)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *2* [2021-08-30 使用Spring Initializr快速创建Spring Boot项目](https://blog.csdn.net/Oracleone1/article/details/119993748)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值