发表于: 2019-04-09 23:51:13
1 495
今天完成:
1.解决了昨天调试时碰到的两个问题,跑通了邮箱验证
1)问题一
问题描述:
java.lang.IllegalArgumentException: Could not resolve placeholder 'XXX' in string value "${XXX}";
我以前是碰到过这种类型的错误的,当时是因为在Spring的配置文件中配置了多个<context:property-placeholder>标签造成的.
问题排查:
不过我记得我在项目中并没有配置多个<context:property-placeholder >.
怀疑是昨天写sendcloudBean注入的有问题
@Component
@PropertySource(value = "classpath:/application.properties", ignoreResourceNotFound = true)
public class SendCloudBean {
感觉可能是这个@PropertySource和这个<context:property-placeholder >冲突了,把@propertysource给注释掉,再试了一下,还是没用.
最后发现是<context:property-placeholder >中的location不能识别正则表达式引起的
多个<context:property-placeholder >错误产生的原因:
spring容器采用反射扫描的发现机制,通过标签的命名空间实例化实例,当spring检查到容器中已经有一个org.springframework.beans.factory.config.PropertyPlaceholderCVonfigurer
的Bean时,会停止对PropertyPlaceholderConfigurer的扫描,即只能存在一个实例(单例).所以呢在引用配置第二个<context:property-placeholder >中的值时就会报错.
我感觉这和我碰到的是差不多的,只能存在一个,不过@PropertySource和<context:property-placeholder >的底层实现不一样,为什么也会产生冲突,这个问题以后研究,先到这.
2)问题2
问题背景:
由于要实现邮箱验证,手机验证,头像等功能,需要对user对象添加几个属性,需要改动表结构,mapper,user对象.产生了这个问题,之前的一些代码直接由MBG直接生成,并没有产生问题.
问题排查:
遇到这个问题,显示debug了好久,仔细检查了好多遍代码,没看出啥来.最后到网上搜了搜,大部分回答都是对象没有无参构造函数造成的,很明显,我的问题跟这个不搭嘎.
最后我觉得可能是resultmap属性映射顺序的问题,尝试着将resultmap的顺序和有参构造函数注入的参数相对应,问题解决.
问题产生原因:
resultMap建立sql查询结果字段与实体属性映射关系的建立有两种方式:
1.通过setter方式构造领域模型,这种方式必须提供一个无参的构造函数和属性的setter方法,因为这种方式是通过无参构造函数创建一个实体对象,再通过set方法将查询出来的值set到对象属性中
2.通过构造函数构建领域模型,也就是目前我的项目中mapper使用的方式
遇到的问题:
见今天完成
收获:
了解mybatis的mapper文件中resultMap标签的两种用法
明天计划:
项目集成图片存储
评论