6/15 Spring之DI依赖注入(设值注入、构造注入)域对象自动注入、DI注解/、JDBCTeple、DBCP连接池、C3P0连接池、rowMapper

本文主要介绍了Spring中IoC的DI(依赖注入),包括设值注入、构造注入、域对象自动注入等方式,还提及了DI注解的使用及优缺点。此外,详细阐述了JDBCTemple的配置,以及DBCP和C3P0连接池的部署与配置,最后说明了rowMapper的创建。

IoC(Inversion of Control 控制反转)的DI(dependence Injection 依赖注入)

DI是IoC是一种实现方式。
IoC的实现有两种:

DI:dependence Injection 依赖注入:Spring中使用的这种

对象和对象的属性都是以注入的方式(配置一个bean就是注入一个bean)添加到容器中的。

DL:dependence Lookup 依赖查找:类似于目录的查找方法

设值注入:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注入了对象,但是没有属性。
在这里插入图片描述
属性这样也有了,但是没有域属性。
在这里插入图片描述
注入
在这里插入图片描述
这样就有域对象的属性了。
在这里插入图片描述
以后遇到对象 有域属性的时候,通过ref 引入域对象(前提是已经引入了这个对象)。
前提是这个对象 和它的域对象都要有 无参构造&set方法。
get方法 和有参构造 可有可无


构造注入:

底层采用带参数的构造器(可以不写无参构造和set方法),但是一般不用这个
在这里插入图片描述
传入的时候index属性和 前面的实体类的属性(默认参数)一一对应的话可以不写下标。
在这里插入图片描述
还可以使用name属性指定参数的名称(很少用)
在这里插入图片描述


注入各种类型(数组、 list set map properties的值

在这里插入图片描述
字符串数组:
在这里插入图片描述
在这里插入图片描述
vlaue 是基本数据类型 和字符串数组用的,所以这里不要再用value了。而是使用ref

对象数组(自定义类型数组 统统使用ref):
在这里插入图片描述

字符串list
在这里插入图片描述

对象list
在这里插入图片描述

字符串set
在这里插入图片描述

字符串map

entryset:键值对集合,所以map里面使用entry
在这里插入图片描述

对象map
在这里插入图片描述

properties(属性)
在这里插入图片描述


域对象自动注入:autowire

可以使用autowire自动注入域属性。

按名称中注入:byName 会搜索配置文件中 和对象属性名相同ID的bean,自动注入。
在这里插入图片描述

按类型自动注入:byType 查找和域属性类型相同或者其子类的bean的对象,注入。
1.id不相同无所谓。根本不看id,没有id也可以。
2. 只要属性里面有个type为school的(有且仅有一个),同一个类型的对象,有多个bean,就要错。
3. 如果当前类和他的子类对象都在这个配置文件里,那就会错。
在这里插入图片描述
如下,当有两个school的时候就不行了。这个时候只能按名称了。
在这里插入图片描述


当遇到多个配置文件

1.使用可变参数
在这里插入图片描述

2.使用通配符
在这里插入图片描述

3.设置一个总配置文件

注意,总配置文件和次配置文件 的文件名字格式不能一样,比如下面 不能都写成 “spring-” 类型。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


DI注解:dependence Injection 依赖注入

IoC的DI注解底层使用了AOP,要添加AOP的jar包。
在这里插入图片描述
有了注解,配置文件里面配置的bean就不需要了。

加context约束头
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

添加组件(component ) 扫描器 component :告诉spring框架 去源代码里面指定的某些包下面去找这个注解。
在这里插入图片描述
注意,带星 * 的扫的都是这个包的 子包。当前包下的配置文件扫不到。

在这里插入图片描述

涉及到自动注入,就要加Autowired。
若后面有Qualifier 就是按名字注入,没有就是按类型(默认的)
在这里插入图片描述
在这里插入图片描述

自动注入另外的写法:Resource 按类型 / Resource(name=" ") 按名称
在这里插入图片描述

在这里插入图片描述
这个注解是加载源代码级别的。


使用一个配置类来替换配置文件。
SpringBoot推荐使用

@Configuration
在这里插入图片描述

通过@Bean 表示当前返回值的对象就是一个bean
在这里插入图片描述
同样的 bean后面可以配置很多东西
在这里插入图片描述
在这里插入图片描述

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

有了这个方法,在创建实体类的时候就不用加注解了。

注解和配置的优缺点“:
注解:简单,写在源码中,修改了注解的属性,代码必须重新编译。
配置文件:修改配置文件,重启服务器,配置生效。

注意,配置文件和注解同时存在的时候,配置的优先级要高于注解。

JDBCTemple

Spring中内置的JDBC的封装,类似于dbutils

导入jar包:
基本jar包 7个,mysqljdbc驱动 spring-jdbc.jar ,spring-tx.jar 一共9个包

在这里插入图片描述

在这里插入图片描述

以后在业务层的实现类,就不再new ServiceImpl了
而是使用注入
在这里插入图片描述
在这里必须要提供set方法
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在写配置文件的时候 ctrl+shift+T 查找文件,找到这个来自spring框架的jdbc数据源
在这里插入图片描述
双击进入,拷贝全路径名。供class使用。
org.springframework.jdbc.datasource.DriverManagerDataSource

JDBC的配置参数,由于需要找到spring框架里面赋予的名字,需要进行如下操作。

在这个DriverManagerDataSource里面找配置方法。选中方法名 ctrl+O
在这里插入图片描述
在这里插入图片描述
这样就获得了driverManagerDataSource的第一个配置参数 driverClassName

由于需要四个配置文件,而driverManagerDataSource只有一个,故此时进入driverManagerDataSource 的父类去寻找。点击进入父类。寻找其他配置参数的名称。
在这里插入图片描述
在这里插入图片描述

这样就得到了四大配置文件的名字及其值
在这里插入图片描述

在这里插入图片描述
填入老四样的具体路径
在这里插入图片描述

写好配置文件了,现在来指定配置文件的路径名。
同样的 ctrl+shift+T 这里不要导错包了,有两个来自其他jar包的
在这里插入图片描述
拷贝全路径名。这里再写的时候没有配置脚本文档,可以通过名字自行导入在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
进入PropertyPlaceholderConfigurer,寻找配置文件名ctrl+o
在这里插入图片描述
发现没有合适的jar包,进入父类寻找
在这里插入图片描述
仍然没有,进入父类的父类寻找在这里插入图片描述
发现还是没有。继续进入父类
在这里插入图片描述
这里需要导入包
在这里插入图片描述
还是没有。继续进入父类。在这里插入图片描述
在这里插入图片描述
终于找到了。
在这里插入图片描述
拷贝方法名
在这里插入图片描述

就这样,指定了配置文件的路径。
在这里插入图片描述

**==========================================================================================================**
指定路径名的第二种方法:通过DI注解:
先修改头文件:加入三句di注解的头文件配置
在这里插入图片描述
第一次使用右括号 < 的时候没有出现context的选项,检查jar包存在,并且buildPath了,
在这里插入图片描述故重启eclipse,终于正常。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
原因:少导入了个包
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
要一致。然后发现还是不行 junit没有报错,但是没有插入数据。

经过检查发现居然是业务层实现类忘了写方法 了!在这里插入图片描述
通过修改过后,正常插入。实现功能。

**=========================================================================================================**

完整代码:

实体类:
在这里插入图片描述
持久层接口:
在这里插入图片描述
持久层实现类
在这里插入图片描述
业务层接口
在这里插入图片描述
业务层实现类:
在这里插入图片描述

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

在这里插入图片描述

包:
在这里插入图片描述

**=======================================================================================================**
另一种配置DataSource的方法
进如JdbcDaoSupport
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
进入这个方法,拷贝全路径名。
在这里插入图片描述
在这个方法内查找set属性方法,无果,进入父类方法查找
在这里插入图片描述
有了。
在这里插入图片描述
配置完成。
在这里插入图片描述

**==========================================================================================================**

DBCP连接池

在此路径下找到这两个包 并部署到项目中。
在这里插入图片描述

在这里插入图片描述
找到这个包并部署到项目里 。
在这里插入图片描述
在这里插入图片描述

配置数据源,使用dbcp连接源

找到这个方法,进入
在这里插入图片描述
直接复制包名
在这里插入图片描述
在这里插入图片描述

现在需要去这个包里面找配置的名字了。
添加说明文档

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在方法里面通过搜索setdriver seturl setusername setpass 发现和jdbc的属性名一样,所以不需要修改。
这样就配置成功了。

通过测试成功,这时候DBCP就配置成功了。

=============================================================================================================

C3P0连接池

在这个路径里面吧jar包部署到程序中
在这里插入图片描述
在这里插入图片描述

现在随便找一个使用过c3p0的项目 获得c3p0的关键字
在这里插入图片描述
在这里插入图片描述
ctrl+shift+t
在这里插入图片描述
在这里插入图片描述

这些配置文件,同样可以使用jar的source文件来寻找
在这里插入图片描述

这样,c3p0就配置完成了。


接下来测试一下其他方法的使用。

查找

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试的时候出错

发现是集合的返回类型写错了,应该是String类。

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

自己写的另外的方法,一直测试跑不通(上图注释掉的),
在这里插入图片描述
网上搜索是没有rowMap

创建rowMapper

在这里插入图片描述
重新写这两个方法的实现类。
在这里插入图片描述

针对查询结果返回一个list的: query
在这里插入图片描述

在这里插入图片描述

测试 ,成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值