非注解方式spring功能汇总

spring基本使用

1.创建一个dao接口,实现类;service接口,实现类并且service里用new创建对象方式调用dao的方法

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

2.使用spring分别获取dao和service对象(IOC)

在这里插入图片描述

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

注意

在这里插入图片描述

2中的service里面获取dao的对象方式不用new的(DI)

在这里插入图片描述
在这里插入图片描述
运行测试:
使用1的方式创建service的对象,调用service方法,看是否成功调到了dao的方法
在这里插入图片描述

补充知识点

对象起别名:

在这里插入图片描述
多个别名之间可以用,;空格分隔
在这里插入图片描述
在这里插入图片描述
如果上面这里写个不存在的,会报错:
在这里插入图片描述

bean的作用范围

就是造的对象是单个还是多个(单例还是非单例的):
如下图:
得到结论,spring默认创建的是单例的。
在这里插入图片描述
通过配置的方式创造非单例的
不配和配上singleton都是单例
在这里插入图片描述

加个如下图,再运行上面的程序,发现地址不一样了。
在这里插入图片描述
总结:
可以重复用的对象适合用spring创建。
在这里插入图片描述

三种方式创建对象,分别如何整合spring

接口和实现类用于代码演示:
在这里插入图片描述
在这里插入图片描述

日常用new通过构造方法的方式(常用)

就上面的内容。
补充
spring是用无参构造方法,使用反射创建对象的。
后面看spring原理底层实现再说。

使用静态工厂的方式(了解)

使用静态工厂创建对象

早些年: 创建对象常用的方式,造对象不要自己new,用工厂方式进行一定程度的解耦。
为了兼容早期的一些系统,了解即可。

步骤:
写一个类叫工厂,里面写个静态的(static)方法,用new创建对象返回。
在这里插入图片描述
使用工厂获取对象:
在这里插入图片描述

如何交给spring管理(了解)

告诉:
工厂类是哪个,
工厂类里面造对象的方法是哪个
在这里插入图片描述
使用:
在这里插入图片描述

使用非静态工厂方式

早些年还有一些非静态的方式…

使用非静态工厂创建对象(了解)

工厂类:
里面写非静态的方法,返回对象
在这里插入图片描述
使用:
就得多个new:
在这里插入图片描述

如何交给spring管理(了解)

先要给工厂对象造出来,
然后要告诉用哪个工厂造对象,还要告诉里面哪个方法造对象
在这里插入图片描述
实现:
在这里插入图片描述

FactoryBean(!!务必掌握,后面整合的时候大量的框架里都在用这种方式和spring打交道)

非静态工厂用spring管理的现有缺陷:

在这里插入图片描述

spring专门针对这第三种方式的缺陷做了改良,并且这种改良方式后面还很实用:

要写一个类:
代替原始实例工厂中创建对象的方法
在这里插入图片描述
配置:
在这里插入图片描述
实现:
在这里插入图片描述

造出来的对象userDao是单例还是非单例的

验证一下:
是单例的
在这里插入图片描述
改成非单例:
在这里插入图片描述

bean的生命周期

依赖注入(往别人里面传对象,上面都是自己去调用别的获取对象)

以后set方法注入起了个名字,要说:setter注入
在这里插入图片描述
下面的演示统一用的,运行方法:
在这里插入图片描述

setter注入——引用类型

上面讲过了。
提供一个set方法,用ref属性引用对应的bean就行了。
在这里插入图片描述

setter注入——简单类型

在这里插入图片描述

演示:

提供set方法:
在这里插入图片描述

配置文件:
在这里插入图片描述
运行结果:
在这里插入图片描述

构造器注入

引用类型

set方法改成构造方法:在这里插入图片描述
配置文件:
在这里插入图片描述

简单类型

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

构造器注入(解耦方式写法)

上面基本写法有些缺陷,形参变化了,配置文件里就不能用,名称耦合度高
在这里插入图片描述
解耦方式:用参数类型去确定
在这里插入图片描述
在这里插入图片描述

新问题:如果类型有重复的怎么办

在这里插入图片描述
用位置写,告诉他是第几个位置的
在这里插入图片描述
在这里插入图片描述

总结

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

四种方式如何选择

在这里插入图片描述

依赖自动装配

要是可以不写,spring自己帮你做依赖注入多好——可以
spring自动给你在容器中找到你要的东西再给你塞进去

贯彻落实了ioc的思想:你给个入口,什么都不管,我给你
在这里插入图片描述
在这里插入图片描述
service里还是这些,不删:
在这里插入图片描述
default:默认,no不用
在这里插入图片描述
在这里插入图片描述

按类型(以后主要使用这个,按名称的话改个名就完了)

在这里插入图片描述
其余都不动:
在这里插入图片描述
在这里插入图片描述
运行结果:能用
在这里插入图片描述

注意1:

按类型装配,这里要的是dao,
在这里插入图片描述
这里定义的bean实现了dao接口,所以没报错
如果这里没有,他装配谁啊,所以会报错
在这里插入图片描述

注意2

现在有两个dao的实现类对象,按类型装配,不知道给哪一个。
所以:
按类型装配要求你类型匹配时候,必须是唯一的。

在这里插入图片描述

注意3:按类型连名都能不起

在这里插入图片描述

按名称

按名称匹配,要保证下面这两个名称要起的一样。不然会报错。
在这里插入图片描述
在这里插入图片描述
如果有多个,但是名称一个都配不上,还是会报错
在这里插入图片描述

总结和注意

在这里插入图片描述

集合注入

上面基本注入的都是单一的东西。现在注入多个,集合怎么注入。
这里主要就学个格式。
在这里插入图片描述

预置场景

一个dao接口和实现类
在这里插入图片描述
配置:配一个dao
在这里插入图片描述
运行:
在这里插入图片描述
dao实现类:
在这里插入图片描述
在这里插入图片描述

配置文件写法

在这里插入图片描述
在这里插入图片描述
**在这里插入图片描述
运行及结果:
在这里插入图片描述

总结

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

数据源对象管理

上面都是管理我们自己的对象。
如果是第三方的对象该怎么管。

这里通过一个案例去看第三方的对象怎么管。这里只选择了一个对象,很多对象的管理都很相似。
前面学过什么就可以管什么。

这里管理一下阿里的德鲁伊。

在这里插入图片描述

写配置文件:

分析

想想这个DruidDataSource对象最基本的需要哪些信息:
一个数据源,要连数据库,像数据库驱动,url,用户名密码这些
那我们是用构造方法还是set方法注入?
没得选,因为别人写好的类,点进去看看:
构造方法显然不满足:
在这里插入图片描述
set方法:都有,所以使用set方式注入
在这里插入图片描述

所以配置文件写法:

在这里插入图片描述

运行及结果:

在这里插入图片描述

c3p0

添加坐标

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
要把驱动坐标配上,下面配置文件里属性要驱动
在这里插入图片描述

配置文件

管理c3p0连接池对象
查看类发现同样没法使用构造器注入,也得使用set注入
在这里插入图片描述

运行

在这里插入图片描述
配的信息已经注入进去了:
在这里插入图片描述
发现还有很多别的信息:
在这里插入图片描述
那就可以继续配:
在这里插入图片描述

加载properties文件

上面配置文件中的配置写配置文件中不合理。
要抽出来。
在这里插入图片描述
这里要学习如何用spring加载properties文件里的信息
想想有哪些过程:
首先spring要加载properties文件,得告诉spring这个文件,不然读不到里面信息。
第二,写properties文件里,配置文件里就要用别的方式写了。

修改配置文件

开了一个新的namespace命名空间叫做context,这是spring提供的命名空间:
达到一个效果,spring中可以使用一个全新的命名空间叫做context。

以后开命名空间基本都是这个套路,复制新加后改这几个地方
在这里插入图片描述
然后:
在这里插入图片描述

演示

上面的看不到效果,弄个能看到效果的证明一下没问题:

写个dao,实现类里定义一个属性name, 把文件读出来的值注入到这里面,运行save方法能看到这个值:
在这里插入图片描述
在这里插入图片描述
运行程序:
在这里插入图片描述
在这里插入图片描述

总结

在这里插入图片描述

一些坑要注意

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

容器

对前面的内容进行一个补充
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

核心容器总结

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值