Spring的使用

简介: Spring的使用


开篇点题:为什么要用到Spring?

参考这篇文章: http://t.csdn.cn/oR5lM


一、创建一个Maven项目

1.创建一个Maven项目



fdacdfa953784d178083e295bfce9d68.png

51de78c1e3af47f7a554b2892f0ef8d2.png


2.添加Spring依赖/框架支持


在pom.xml中添加框架的支持,xml配置如下:( 下载失败参考: http://t.csdn.cn/zUYhO
<dependencies>
//spring-context:spring 上下文
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.3.RELEASE</version>
    </dependency>
//spring-beans:管理对象的模块
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>5.2.3.RELEASE</version>
    </dependency>
</dependencies>


aa105dbbf0db4758b25f0fad76d62a66.png


3.添加启动类

其实是非必要步骤,正常项目一般使用Tomcat,但是我们测试学习还是使用启动类方便

随便创建一个类,里面一个main方法就行,没有什么特殊含义,比如我们创建一个App类

29e624a048064229a292a553a6b1fb8b.png

二、存储Bean对象

bean:豆子 Enterprise Java Bean: Java的软件组件模型

1.创建一个bean

和平常创建一个类基本没啥区别


c45318eb7bb54919871943f277b73e80.png


2.把Spring配置文件加入到resources中


在创建好的项目中 添加 Spring 配置文件 spring-config.xml ,将此文件 放到 resources 的根目录下,直接复制下面代码粘贴即可,最终结果如下图
<?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">
    <content:component-scan base-package="com.bit.service"></content:component-scan>
</beans>

39693ff3bc80449da08d1c140b58f288.png


3.将bean对象配置到spring配置文件当中


bean的id属性: 相当于一个别名/名称,区别是这个id是唯一的,不能重复 bean的class属性: 对象本身,一般是 包名+类名



image.png


三、读取Bean对象


在哪读? 在main方法中进行读取操作。

1.得到 Spring 上下文对象


对象都交给 Spring 管理了,获取对象要从 Spring 中获取,那么就得先得到 Spring 的上下文

除了 ApplicationContext 之外,我们还可以使用 BeanFactory 来作为 Spring 的上下文。他们两种效果是一样的, ApplicationContext 属于 BeanFactory 的子类。

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


2.获取某一个指定的 Bean 对象


在Spring中获取这个对象
//1. 得到Spring对象,传入的是xml文件
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
//2. 从Spring中取出对象
//要进行强制类型转换,getBean方法返回值是 Object
Bean bean = (Bean) context.getBean("bean");//传入的内容就是 bean 的 id


获取Bean的几种方式

① 通过Bean的id

推荐将id设置为类名的小写,便于在强制转换的时候不容易写错


Bean bean = (Bean) context.getBean("bean");//传入的内容就是 bean 的 id

② 通过Bean类型


不推荐使用,因为如果同时注入两个类名相同,会查询不到唯一的User。报错: single matching

bean but found 2:....

Bean bean = context.getBean(bean.class);//直接传入bean的类名+后缀

③ 两者都传入


将id传入进去,并且将类型传入进去,这样不易写错,如果不存在的时候,直接就是null了。没有了暴力转换的问题 .主流常用推荐方式。


Bean bean = context.getBean("bean",Bean.class);//直接传入bean的类名+后缀

3.使用 Bean 对象

//1. 得到Spring对象
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
//2. 从Spring中取出对象
//要进行强制类型转换,getBean方法返回值是 Object
Bean bean = (Bean) context.getBean("bean");//传入的内容就是 bean 的 id
//3. 使用bean对象
System.out.println(bean.sayOk());//简单的使用一下试试


如下图,可以看到能够正常打印结果。

bce8404dd272472883dd1951e47e47bc.png

四、ApplicationContext 和 BeanFactory


面试:请问ApplicationContext 和 BeanFactory 的区别和联系:


继承关系和功能方面来说:Spring 容器有两个顶级的接口:BeanFactory 和ApplicationContext。其中 BeanFactory 提供了基础的访问容器的能力,而 ApplicationContext属于 BeanFactory 的子类,它除了继承了 BeanFactory 的所有功能之外,它还拥有独特的特性,还添加了对国际化支持、资源访问支持、以及事件传播等方面的支持。


从性能方面来说:ApplicationContext 是一次性加载并初始化所有的 Bean 对象,而BeanFactory 是需要那个才去加载那个,因此更加轻量。BeanFactory是比较轻量化的,但是ApplicationContext是牺牲空间换取性能了,性能更高,但其实现在并不是全部加载而是根据硬件配置,根据多方面具体情况。能够几乎最大限度的找到取舍点,是比较智能的。比如资源足够的时候直接 饿汉模式,一次性加载全部。


ClassPathXmlApplicationContext 属于 ApplicationContext 的子类,拥有ApplicationContext 的所有功能,是通过 xml 的配置来获取所有的 Bean 容器的。


五、总结


b5e8b01f43a64a2f87f49a4871edd9d0.png


//1. 得到Spring对象,ClassPathXmlApplicationContext 属于 ApplicationContext 的子类,拥有ApplicationContext 的所有功能,是通过 xml 的配置来获取所有的 Bean 容器的。传入的参数就是xml
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
//2. 从Spring中取出对象,有三种方式,一般使用 id 和 class都传入的方法
Bean bean = context.getBean("bean",Bean.class);
//3. 使用bean对象
System.out.println(bean.sayOk());


通过这个代码的实现,再回顾上一篇博客http://t.csdn.cn/pkvz2


就会有更加深刻的理解,比如xml的文件命名是随意的,因为只需要传入到ClassPathXMLApplicationContext的名字相同就可以(通常命名为 spring-config.xml)


而Spring其实就是一种Ioc(控制反转)的思想,DI(依赖注入)实现的。提现到代码就是 直接从Spring容器中取出对象,不再进行new的方法来实现 低耦合。


而这种 每个类都需要在xml中声明标注id和class的方法其实还是比较麻烦的,是几年前的旧方法了,后面还会有更加方便的方式。

相关文章
|
2月前
|
XML Java 开发者
【Spring】Spring是什么?
【Spring】Spring是什么?
【Spring】Spring是什么?
|
10月前
|
Java 容器 Spring
|
Java Spring 容器
spring之HttpInvoker
  一、HttpInvoker是常用的Java同构系统之间方法调用实现方案,是众多Spring项目中的一个子项目。顾名思义,它通过HTTP通信即可实现两个Java系统之间的远程方法调用,使得系统之间的通信如同调用本地方法一般。
2372 0
|
1月前
|
前端开发 Java 数据库连接
一篇告诉你什么是Spring
一篇告诉你什么是Spring
31 0
|
1月前
|
Java Spring
spring 使用遇到的问题
spring 使用遇到的问题
10 0
|
10月前
|
Java Spring 容器
|
2月前
|
存储 设计模式 Java
【Spring】——Spring简单 读和取(二)
【Spring】——Spring简单 读和取
43 0
【Spring】——Spring简单 读和取(二)
|
2月前
|
存储 Java 数据库
【Spring】——Spring简单 读和取(一)
【Spring】——Spring简单 读和取
53 0
【Spring】——Spring简单 读和取(一)
|
2月前
|
前端开发 Java 开发者
【Spring】 ——初识Spring
【Spring】 ——初识Spring
48 0
|
11月前
|
设计模式 前端开发 Java
Spring 详解
Spring 详解
25333 5