【Spring】Spring的创建和使用手术刀剖析

72 篇文章 2 订阅
67 篇文章 2 订阅

文章目录


在这里插入图片描述


前言

Spring是一个包含了众多工具方法的Ioc容器,它包含以下两个最基本的功能:

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

一、如何创建Spring项目

Spring项目的创建与Servlet类似,分为以下3步:

  1. 创建一个普通Maven项目
  2. 添加Spring框架支持,spring-context、spring-beans
  3. 添加启动类并添加main方法(主要用来测试)。

1.创建Maven项目

在这里插入图片描述

创建成功的效果:

在这里插入图片描述


2.添加 Spring 框架支持

在项的 pom.xml 中添加 Spring 框架的支持,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>

可以看到,这里添加的框架有 spring-context:spring 上下,还有 spring-beans:管理对象的模块。

在这里插入图片描述


3. 添加启动类main

在创建好的项 java 件夹下创建个启动类main:

在这里插入图片描述
可以试着运行打印一下:

在这里插入图片描述
可以看到,是没有问题的。


二、存储Bean对象

存储Bean分为以下2步或者3步:

  1. 如果是第一次添加,则需要先在spring项目中添加配置文件,如果非第一次,则此步骤省略
  2. 创建一个Bean对象
  3. 在配置文件中将需要保存到spring中的Bean对象进行注册

1.添加spring配置文件

第一次使用的时候需要添加配置文件。步骤如下:
(1) 在 resources 的根录下创建一个xml文件,这里我们起名字要规范一点,这个resource一般保存的是我们的静态文件。
在这里插入图片描述

(2)把下面的配置文件复制到里面,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>

在这里插入图片描述


2.创建Bean

这里所谓的创建Bean ,其实就是创建一个 Java 的普通类。只不过权限是由 spring 所持有,千万不要被名字唬到。
在这里插入图片描述
然后先写一个方法,等下用来测试:
在这里插入图片描述


3.将Bean注册到容器中

我们需要在配置文件中,将需要保存到 spring中的 bean 对象进行注册。

在我们刚刚创建的xml文件里面添加下面内容

    <bean id="user" class="com.beans.UserBean"></bean>

这里的 id 可以理解为一个别名,我们给刚刚创建的这个UserBean类,起了一个叫“user"的别名
而这个class则是它的存储路径,我们待会通过这个路径来进行找这个”user“。
因此,我们这里的user取名要规范,便于一看就知道是那个的别名。(起外号要形象)


三、获取并使用 Bean 对象

在这里也可以分为3步:

  1. 得到spring上下文对象
  2. 通过上下文对象提供的方法获取我们需要使用的Bean对象
  3. 使用Bean对象

1.得到spring上下文对象

//1.得到上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");

这个步骤需要注意的是()里面改的内容需要与我们之前创建xml文件名是一致的。

在这里插入图片描述


2.获取指定的Bean对象

//2.通过上下文对象提供的方法,获取我们自己需要使用的bean对象
        UserBean user = (UserBean) context.getBean("user");//需要强转

这里面最后一个括号的内容是我们上面起的别名:

在这里插入图片描述


3.使用Bean对象

//3.调用对象里面的方法
        user.sayHi("aaa");

4.整体代码与效果

public class test {
    public static void main(String[] args) {
        //1.得到上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        //2.通过上下文对象提供的方法,获取我们自己需要使用的bean对象
        UserBean user = (UserBean) context.getBean("user");//需要强转
        //3.调用对象里面的方法
        user.sayHi("aaa");
    }
}

效果:

在这里插入图片描述

这里我们没有new就获取到了一个对象。


5.获取Bean对象的另一种方法

除了 ApplicationContext 之外,我们还可以使 BeanFactory 来作为 Spring 的上下。如下:

 public static void main(String[] args) {
//        //1.得到上下文对象
//        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
//        //2.通过上下文对象提供的方法,获取我们自己需要使用的bean对象
//        UserBean user = (UserBean) context.getBean("user");//需要强转
//        //3.调用对象里面的方法
//        user.sayHi("aaa");

        //1.使用BeanFactory方法来获取上下文对象
        BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
        //2.获取Bean
        UserBean userBean = (UserBean) beanFactory.getBean("user");
        //3.使用Bean
        userBean.sayHi("aaa");
    }

6.getBean的更多用法

getBean() 法有很多种重载法,我们也可以使其他式来获取 Bean 对象,如下:

(1)使用bean name获取bean

UserBean userBean = (UserBean) beanFactory.getBean("user");

(2)根据bean type 获取bean

UserBean userBean = (UserBean) beanFactory.getBean("UserBean.class");

这种方式写法简单,但容易出问题,当同一个类型被注入到spring中多次的时候,就会报错。如下:

当我们有多个bean对象的时候:
在这里插入图片描述
这里去获取bean对象就会报错,因为spring要求,获取对象是必须是唯一的,而恰恰这里不唯一。

在这里插入图片描述

(3)根据bean name 和类型获取bean

UserBean userBean = beanFactory.getBean("user",UserBean.class);

四、经典面试题

1.ApplicationContext 与 BeanFactory 的区别

相同点:

  1. 都提供了getBean方法

不同点:

  1. 从继承关系和功能来说,ApplicationContext属于BeanFactory的子类。BeanFactory 只提供了基础访问Bean的方法,而ApplicationContext除了拥有BeanFactory的所有功能之外,还提供了更的方法实现,比如对国际化的支持、资源访问的支持、以及事件和传播等方面的支持。
  2. 从性能方面来说二者是不同,BeanFactory 是按需加载Bean,因此更轻量,ApplicationContext是饿汉方式,在创建时会将所有的Bean都加载起来,以备以后使用。

五、总结

  1. 操作容器之前,先要有容器,所以先要得到容器。
    a.创建项目
    b.添加 Spring 框架支持,引入 spring-context 和 spring-beans 依赖
    c.创建一个启动类 和 main方法
  2. 存对象
    a. 创建 Bean(普通类)。
    b. 将 Bean 注册(配置)到 spring-confing.xml 中。
  3. 取对象
    a. 得到 Spring 上下,并读取到 Spring 的配置件。
    b. 获取某个 Bean 对象。
    c. 使 Bean 对象

在这里插入图片描述


完!

先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值