小言_互联网的博客

Spring的使用

306人阅读  评论(0)

开篇点题:为什么要用到Spring?
参考这篇文章: http://t.csdn.cn/oR5lM

一、创建一个Maven项目

1.创建一个Maven项目

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

在pom.xml中添加框架的支持,xml配置如下:( 下载失败参考: http://t.csdn.cn/zUYhO


   
  1. <dependencies>
  2. //spring-context:spring 上下文
  3.     <dependency>
  4.         <groupId>org.springframework</groupId>
  5.         <artifactId>spring-context</artifactId>
  6.         <version> 5.2 .3.RELEASE</version>
  7.     </dependency>
  8. //spring-beans:管理对象的模块
  9.     <dependency>
  10.         <groupId>org.springframework</groupId>
  11.         <artifactId>spring-beans</artifactId>
  12.         <version> 5.2 .3.RELEASE</version>
  13.     </dependency>
  14. </dependencies>

3.添加启动类

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

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

二、存储Bean对象

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

1.创建一个bean

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

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

在创建好的项目中 添加 Spring 配置文件 spring-config.xml ,将此文件 放到 resources 的根目录下,直接复制下面代码粘贴即可,最终结果如下图

   
  1. <?xml version= "1.0" encoding= "UTF-8"?>
  2. <beans xmlns= "http://www.springframework.org/schema/beans"
  3. xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:content= "http://www.springframework.org/schema/context"
  5. 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">
  6. <content:component-scan base- package= "com.bit.service"></content:component-scan>
  7. </beans>

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

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

三、读取Bean对象

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

1.得到 Spring 上下文对象

对象都交给 Spring 管理了,获取对象要从 Spring 中获取,那么就得先得到 Spring 的上下文。
除了 ApplicationContext 之外,我们还可以使用 BeanFactory 来作为 Spring 的上下文。他们两种效果是一样的, ApplicationContext 属于 BeanFactory 的子类。

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

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

在Spring中获取这个对象

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

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

四、ApplicationContext 和 BeanFactory

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

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

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

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

五、总结


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

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

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

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

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


转载:https://blog.csdn.net/qq_52328493/article/details/128740670
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场