spring学习笔记(一)

本文详细介绍了Spring框架的各个方面,包括源码查看途径、优点、控制反转(IOC)概念及其过程,深入探讨了bean的管理,如bean的作用域、生命周期,以及如何进行测试代码编写。此外,还讲解了基于XML的bean配置,如注入属性、集合类型属性等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring源码查看地点:

百度搜索interface21来查看源码,因为Spring源码设计巧妙,结构清晰,体现出很多关于java设计模式的灵活运用,有时间要看。

spring的优点:

1.开源的免费框架
2.轻量级非入侵式的框架 非入侵式:引入了spring后不会改变你代码原来的任何情况
3.控制反转
4.面向切面编程
5.支持事务处理,对框架整合的支持
6.方便解耦,简化开发
7.方便程序测试
8.方便和其他框架进行整合
9.降低API的开发难度

IOC:

控制反转,通过注入方法,把一部分控制权交给用户,这样程序不再具有主动性,而是变成了被动的接收对象。从本质上解决了程序员管理对象的创建的问题。可以降低系统的耦合性,让程序员更加专注于业务的实现。

IOC的过程:

第一步:xml配置文件,配置创建的对象
第二步:有service类和dao类,创建工厂类
第三步:在工厂类中,第一步进行xml解析,第二步进行通过反射创建对象,然后返回一个Dao层对象。

个人对控制反转的理解:

就是输入和设定的区别,当可以输入的时候,就不用每次去设定你需要的值而是在你需要什么值得时候,输入一次,就可以得到你想要的值,在java中用户可以控制的不止是输入的数据,还可以是java的对象等,这样就可以节省很多工作。

bean中ref和value的不同:

ref代表的是引用这个对象,相当于传入得是对象的引用。而value是引入的这个对象名字的字符串。后面还有详细的说明。

如何进行spring测试代码编写:

1.首先加载spring配置文件ApplicationContext context = new ClassPathXmlApplicationContext
(“配置文件”)。
2.其次获取配置创建的对象 类名 对象名 = context.getBean(“bean中设定的id”,类名.class)

3.然后就可以使用这个你取出的对象进行你想要的操作。

Spring提供IOC容器实现的两种方式:(两个接口)

1.BeanFactory:IOC容器的基本实现,是Spring内部的使用接口,不提供开发人员进行使用。(加载文件的时候不会创建对象,在获取对象(使用)采取创建对象)
2.ApplicationContext:beanFactory接口的子接口,提供了更多强大的功能。(加载配置文件的时候就创建了对象)
3.ApplicationContext接口有实现类:FileSystemXmlApplicationContext和ClassPathXmlApplicationContext
其中FileSystemXmlApplicationContext需要的参数为对应的系统盘中的某个文件的全路径(绝对地址),
ClassPathXmlApplication代表的类路径,是你在src下的路径,直接写文件名即可

IOC操作之bean管理:

1.bean管理主要是指两个操作:①Spring创建对象
②Spring注入属性
2.Bean管理操作有两种方式:①基于xml配置文件实现
②基于注解方式实现

IOC操作Bean管理(基于xml方式):

1.基于xml方式创建对象:在spring配置文件中,使用bean标签,标签里面添加相应的属性,就可以实现对象创建
2.在bean中常见的属性:id属性:唯一标识。 class属性:类的全路径(包含路径)
3.创建对象的时候,默认也是执行无参构造函数方法完成对象创建。

基于xml方式注入属性:

1.DI:依赖注入,就是注入属性
2.IOC和DI的区别:DI是IOC中的一种具体实现,就表示为依赖注入,但是DI需要在创建对象的基础之上完成,
3.两种注入方式:①使用set方法注入:创建类,然后定义属性和set方法,然后在spring配置文件中,配置对象创建,然后再配置 属性的注入

创建对象如下:即用bean标签来创建一个对象,然后在bean标签中可以使用property注入相应的属性。属性可以注入多个,对象也可以创建多个。
在这里插入图片描述
其中name代表类里面属性名称,
value代表属性注入的值。
在这里插入图片描述

②使用有参函数构造注入
创建类,然后定义属性,然后写一个有参函数,通过有参构造函数进行注入,值得注意的是和set方法不同的是,他们在配置文件中所用的属性不同。
在这里插入图片描述
如果想用有参函数进行注入的话,不能用property属性,而应该用constructor-arg这个属性,但是里面的属性是差不多的,也是name和value属性,但是在constructor中我们可以只用index属性,即参数属性,可以设置index属性为0,1,2等,这些是你传入的参数在有参构造函数中的位置。eg:在本例中,可用0代表bookame,1代表bookpeople。
在这里插入图片描述

③p名称空间注入:是将set方式注入进行了简化。底层还是使用的set方法。
首先添加一个约束,
在这里插入图片描述
添加约束之后你就可以再bean中用p:来添加属性
在这里插入图片描述

字面量:你设置使用的固定值,就叫做字面量。比如直接在类中让某个变量等于一个常量,常量就叫固定值,或者在配置文件中,用property中的name和value来设置字面量。
设置的值可以为空值,属性值包含特殊符号,下面即为操作方法。
设置空值的时候让你的property属性名字改写什么写什么,但是你的value要去掉,然后在你的property中写一个null标签即可。
在这里插入图片描述
设置特殊符号一共有两种方法,①是使用转义符号进行转译,②和使用set的时候差不多,区别是value要拿到property中写下value标签,并且用CDATE来表达你想要表达的。
在这里插入图片描述

外部bean和内部bean

外部bean:直接在beans标签内部直接定义的bean对象,外部bean可以被多个bean对象引用

内部bean:在某个bean标签的内部定义的bean对象,内部bean只能被某个对象的某个属性引用。

注入属性—外部bean

(1)创建两个类service和dao类
(2)在service类中调用dao里面的方法
(3)在spring配置文件中进行配置和前面的主要区别在于这次service中引入的对象是userdao,所以要在配置文件中对外部类进行配置外部bean。
在这里插入图片描述

在配置文件中,由于要在service中引用userdao,所以要有两个bean,然后在第一个bean中调用第二个bean,入下图所示 。

在这里插入图片描述

注意:为什么userDao中引导的地址是userdaoimpl而不是userdao,因为userdao是一个接口,不能new对象,所以要找到他的实现类来新建对象,实现类也就是userdaoimpl

注入属性-内部bean

注入内部bean和外部bean的步骤差不多,但是要把你引入的类放在一个bean的内部,用proprerty标签命名再在里面写bean标签即可。
在这里插入图片描述
同一个内部bean改成外部bean就是这样,差别不是很大。
在这里插入图片描述

注入属性-级联赋值

第一种写法:
在这里插入图片描述
和外部bean操作几乎相同

第二种写法:直接将类属性作为名称,然后在后面的value中写值。这种方法需要向对象设置值,所以你需要在类中生成你要的属性的get方法,要不然得不到对象就不能设置值。
在这里插入图片描述
在这里插入图片描述

注入集合类型属性

基本的注入方式:
老样子,首先定义类,在类中分别定义数组,list,map,还有set,并写出他们的set方法。
在这里插入图片描述

第二步 设置配置文件
数组由于其中的value不止有一个值,所以当设置的bean中有数组的时候要在property中添加一个array标签。在array中设置相对的值即可。
在这里插入图片描述

当使用list时,和数组一样,将array换成list即可。
在这里插入图片描述
map由于其中值得设定的键值对形式,所以当使用map时,要添加entry标签在map下,用来表示键值对,而不是value。
在这里插入图片描述

set时同数组和list。
在这里插入图片描述

关于注入集合属性的细节操作
在集合里面设置对象类型的值
在这里插入图片描述
就是通过将新创建的对象注入到在一个bean中新建的集合中即可。和外部bean用法差不多。

把集合注入部分提取出来变成公共的。(把集合注入部分提取出来。)
首先设置命名空间。
在这里插入图片描述
然后使用util进行数据封装,就可以把util当做一个类似bean的东西进行引用。
在这里插入图片描述
util也可以进行数据引用,用法和之前类似。
在这里插入图片描述

Spring中有两种bean的类型,一种是普通bean,一种是工厂bean
普通bean和工厂Bean的区别:
普通bean是你定义的class类型就是你返回的class类型
工厂bean可以返回其他的你定义的类型。

定义一个工厂bean,其中Cource为自己定义的类,可以换成别的。
在这里插入图片描述
测试
在这里插入图片描述

IOC操作Bean管理(bean作用域)

1.在Spring里面,设置创建bean实例是单实例还是多实例
2.在Spring中,默认bean是单实例对象
3.可以通过scope属性来设置bean的作用域
其中scope比较常见的属性值为:singleton,表示为单实例对象
prototype,表示为多实例对象
其中singleton和prototype的区别为当scope的设置值为singleton时,加载spring配置文件时候就会创建单实例对象,设置值为prototype的时候,不是在加载spring配置文件时候创建文件,在调用getbean方法(测试)的时候创建多实例对象(也就是在你获取的时候才创建这个bean对象)。

bean的生命周期

生命周期:从对象创建到对象销毁的过程

bean生命周期:(1)通过构造器创建bean实例(无参构造)
(2)为bean的属性设置值和对其他bean的引用(调用set方法)
(3)调用bean的初始化的方法(需要进行配置初始化的方法)
(4)bean对象可以使用了(对象获取到了)
(5)当容器关闭时,调用bean的销毁的方法(需要进行配置销毁的方法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值