造一个方形轮子文章目录:造一个方形的轮子
01、先把车正过
在上一篇《造一个方形的轮子4–依赖注入》的最后提出了一个问题,按类型简称(不带包名)以及按注解上设置的Bean名字去初始化Bean的时候都会有覆盖问题,比如不同包下的相同的类,或者在注解上设置了相同Bean名字的类,解决方法不允许重复就可以了,暴力一点有重名的直接抛异常。
BeansInitUtil.java 修改loadClass方法:
1 | //......上略 |
复制一个com.jisuye.service.impl.AbcImpl到com.jisuye.service包启动程序查看日志输出:
1 | 12:48:17.058 [main] ERROR com.jisuye.core.SquareApplication - There are duplicate beans ,beanName:abcImpl |
看日志输出了重复的bean异常提示,现在删除刚复制的AbcImpl.java,将原来com.jisuye.service.impl.DefImpl及com.jisuye.service.impl.DefImpl都使用@Service(“def”) 注解,然后启动程序查看日志输出:
1 | 12:53:53.801 [main] ERROR com.jisuye.core.SquareApplication - There are duplicate beans ,beanName:def |
也输出了输出了重复的bean异常提示,验证完毕。
02、数据库支持准备
数据库支持就以mysql为例,添加一个jdbcTemplate类似的功能。
首先引入数据库链接池,这们就不用管链接的问题了,使用的是HikariCP链接池,在pom.xml中添加依赖
1 | <dependency> |
配置文件中添加数据库相关配置
1 | square: |
03、DbUtil工具类
将创建数据库链接池及相关方法封装到统一的工具类DbUtil.java:
1 | package com.jisuye.util; |
init方法用来初始化链接池,update方法执行insert/update/delete语句,select处理查询并简单使用反射封装了一下Entity。
04、添加JdbcTemplate
JdbcTemplate类,只是封装了一下DbUtil的方法,提供给其它service使用,代码如下:
1 | package com.jisuye.core; |
修改依赖注入部分代码,因为做的是框架,要考虑不使用DB的情况,所以jdbcTemplate默认不初始化,如果有其它Service添加了JdbcTemplate的依赖,再去初始化。防止直接初始化时,没有配置DB相关配置报错的情况。
BeansInitUtil.initDI()方法做如下修改(只保留了大体结构,具体查看=======标记中间的部分):
1 | private static void initDI(Map<String, BeanObject> map){ |
05、验证数据库支持
表abc的表结构:
字段名 | 字段类型 | 备注 |
---|---|---|
id | int | 自增id主健 |
name | varchar(255) | 姓名 |
修改DefImpl.java,添加JdbcTemplate操作:
1 |
|
修改AbcImpl.java, 添加JdbcTemplate操作:
1 |
|
添加AbcEntity.java,查询结果使用
1 | package com.jisuye.service; |
原来的SquareApplication中有查看bean是否注入成功片段, 所以直接启动项目即可验证。
1 | public static void run(Class clzz, String[] args) { |
查看控制台输出:
1 | 18:18:39.761 [main] INFO com.jisuye.core.SquareApplication - beans size is:11 |
查看数据库记录:
id | name |
---|---|
1 | ixx |
说明插入及查询成功。
06、翻车时间
数据库这还好,虽然没有打包在其实项目引用测试,这个等下一篇添加完web支持后一起验证。
发现一个注入的问题,当时处理注入是循环的整个容器里的bean去做解析,但很明显,容器中的bean是多对一的关系,多个key对应的 都是同一个Bean 如果使用循环的方式,就至少会多一倍解析处理..这个确实不好接受,Bean的数量少还可以,多了会延长程序的启动时间,这是不能接受的。解决方式其实也简单,下一篇再处理一下吧。
本篇代码地址: https://github.com/iuv/square/tree/square5
本文链接: http://blog.jisuye.com/2019/07/08/square5/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!