Spring相关知识总结

此文章是根据网上某某有关spring讲解的视频,做的笔记,讲的很好

Bean的创建规则

applicationContext.xml文件简单配置
配置文件

在其中一个类中在空参构造中输出一句话

在这里插入图片描述

  1. BeanFactory对象

    	提供的是一种延迟加载的思想,bean对象什么时候使用,什么时候进行创建
    

在这里插入图片描述

断点打在19行,当加载完配置文件时候,并没有创建bean对象
在这里插入图片描述

只有在使用的时候,才创建了bean对象;继续下一步,执行到21行时
在这里插入图片描述

bean对象被创建
在这里插入图片描述

  1. ApplicationContext对象

容器一加载就直接创建bean对象,采用的是立即加载思想

在这里插入图片描述

将断点打在第12行,进入断点调试,下一步看日志信息,在还没有使用到该对象的情况下,就已经被创建

在这里插入图片描述

ApplicationContext对象的两个实现类
ClassPathXmlApplicationContext:加载类路径下面的配置文件(一般我们使用这个类)
FileSystemXmlApplicationContext:可以加载磁盘路径任意位置的配置文件

Bean的创建方式

  1. 第一种:通过无参构造函数创建对象(开发常用)

    	该方式,如果没有无参构造的话,会创建失败,报异常
    
  2. 第二种:使用工厂创建对象

    	静态工厂创建对象:需要使用bean标签的factory-method属性,指定静态工厂的创建对象的方法
    

工厂类
在这里插入图片描述

applicationContext.xml配置
在这里插入图片描述

实例工厂创建对象

工厂类
在这里插入图片描述

apllicationContext.xml配置
在这里插入图片描述

Bean的作用范围
通过bean的scope属性进行配置
属性的取值:

singleton:单例(默认)
prototype:多例(当我们让spring接管struts2的action创建时,action必须配置)
request:作用范围是一次请求,和当前请求的转发
session:一次会话
globalsession:作用范围是一次全局会话

Bean的生命周期
涉及到的bean标签的两个属性:

	    init-method	:初始化方法,需要在bean对象中 ,写一个 初始化的方法,进行配置验证
		destroy-method :销毁方法,,需要在bean对象中 ,写一个 销毁的方法,进行配置验证

bean书写
在这里插入图片描述

单例:

		创建:当容器一加载,就会创建 
		存在:只要容器存在,对象就会存在
		销毁:容器销毁,对象就销亡

applicationContext.xml配置
在这里插入图片描述

运行结果
在这里插入图片描述
多例:

		创建:每次使用时,创建对象
		活着:只要对象在使用中,就一直存在
		销毁:当对象长时间不使用,并且也没有其他的对象引用,将由垃圾回收器进行回收

applicationContext.xml配置
在这里插入图片描述
结果:
在这里插入图片描述
销毁方法没有执行,原因是因为spring不知道什么时候次对象不被使用

Spring的IOC思想

在这里插入图片描述

依赖注入的两种方式(非注解版):

  1. 通过set方式进行注入
  涉及的标签:property
         标签属性:
         				name:指定set方法的名称
         				===================上面指定给哪个参数赋值,下面两个是赋值的内容===================
         				value:指定基本数据类型或String类型的数据
         				ref:指定其他的bean类数据
    	标签出现的位置:
    					写在bean标签里面

在这里插入图片描述

在这里插入图片描述

2.通过构造函数注入

 涉及的标签:constructor-arg
 标签属性:
 				type:指定参数的类型
 				index:指定参数的索引位置,从0开始
 				name:指定参数的名称,(一般使用)
 				===================上面三个是给哪个参数赋值,下面两个是赋值的内容===================
 				value:指定基本数据类型或String类型的数据
 				ref:指定其他的bean类数据
标签出现的位置:
				写在bean标签里面

在这里插入图片描述
在这里插入图片描述

通过set方法注入复杂类型(结构相同,标签可以互换)
list/set/array
map/props
在这里插入图片描述

基于注解的IOC

  1. 用于创建bean对象

@Component
作用:相当于在applicationContext.xml中配置了一个bean标签;
可以出现的位置:类上面
属性: value :指的是 bean的id,当不写的时候,默认是当前类名,首字母小写
由此注解衍生三个注解:
@Repository: 一般用在持久层
@Service: 一般用在业务层
@Controller: 一般用在表现层

  1. 注入数据类型

@Autowired:
作用:自动按照类型注入。只要有唯一的类型匹配就可以注入成功。如果注入的bean容器中符合的类型不唯一的时候,就会将变量名作为bean的id,在容器中查找,如果找到的话,也是可以注入成功,如果没有,就会抛出异常

原理:首先①根据类型去匹配,看是否有符合类型的bean对象;
如果存在,且存在多个,再根据变量的名字去跟符合类型的对象的bean的id名字是否相同,如果都不同,则抛出异常,
在这里插入图片描述

@Qualifier:
作用:在自动按照类型注入的基础上,按照bean的id进行注入;在跟类成员注入数据时,此注解需要和@Autowired配合使用,不可以独立使用;但是再给方法的形参注入数据时,可以独立使用;
属性:value:用于指定bean的id
@Resource(name= " "):
作用:直接按照bean的id注入
属性:name:用于指定bean的id
以上的注解适用于注入其他bean类型。用于注入基本类型和String类型,需要使用@Value注解===
@Value:
作用:用于注入基本类型和String类型数据,可以借助spring的el表达式读取properties文件的配置
属性:value:用于指定注入的数据的值

取消xml配置文件,编写配置类
在这里插入图片描述

视屏截图

在这里插入图片描述

spring整合Junit步骤

  1. 第一步:添加spring-test-4.2.4RELEASE依赖

  2. 第二步 :使用@RunWith注解;替换junit
    使用SpringJunit4ClassRunner

  3. 第三步:在测试类上面添加ContextConfiguration注解 纯注解的使用 ,使用class属性; class={字节码对象}
    有xml配置的,使用locations属性; locations= {""}

猜你喜欢

转载自blog.csdn.net/whiteGu/article/details/83274789