前几天在做一个Dao的单元测试的时候,碰到了一个spring的错误。如下:
引用
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'my.demo.dao.UUIDClassDaoTest': Unsatisfied dependency expressed through bean property 'UUIDClassDao': Set this property value or disable dependency checking for this bean.
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
.checkDependencies(AbstractAutowireCapableBeanFactory.java:1019)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.
populateBean(AbstractAutowireCapableBeanFactory.java:839)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.
autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:273)
at org.springframework.test.AbstractDependencyInjectionSpringContextTests.
injectDependencies(AbstractDependencyInjectionSpringContextTests.java:179)
at org.springframework.test.AbstractDependencyInjectionSpringContextTests.
prepareTestInstance(AbstractDependencyInjectionSpringContextTests.java:158)
at org.springframework.test.AbstractSingleSpringContextTests.setUp(Abstrac
tSingleSpringContextTests.java:88)
at junit.framework.TestCase.runBare(TestCase.java:128)
我的Dao单元测试类继承自 AbstractTransactionalDataSourceSpringContextTests
这个类,它可以提供对springContext的支持。
从errorstack中看,好像是Dao中的属性没有设置好。 所以, 我检查了代码,Dao中 定义了属性 uUIDClassDao,并且提供了set方法,如下:
private UUIDClassDao uUIDClassDao = null;
public void setUUIDClassDao(UUIDClassDao uUIDClassDao) {
this.uUIDClassDao = uUIDClassDao;
}
在Spring context文件中,定义了如下的bean。
<bean id="uUIDClassDao" class="my.demo.dao.hibernate.UUIDClassDaoHibernate">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
看起来没问题呀,bean的id和dao中定义的属性都是 uUIDClassDao,通过把autowire模式设置成 AUTOWIRE_BY_NAME ,应该我的dao测试类会被自动注入uUIDClassDao这个bean的。
可是很意外,这并没有发生。What’s the problem ?
我又仔细看了看error stack,忽然发现,提示的是 “Unsatisfied dependency expressed through bean property '
UUIDClassDao':”。注意,不是uUIDClassDao,而是UUIDClassDao。
难道Spring会把uUIDClassDao识别成 UUIDClassDao ?
我跟踪了spring的代码,发现,spring在拿到单元测试dao的时候,用了Introspector.getBeanInfo(Class class0) 去得到对象的属性。的的确确,通过这种方式拿到的属性名是 UUIDClassDao,而不是uUIDClassDao。
为了再次验证,我写了一个简单的测试程序:
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
public class AppBeanInfo {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
BeanInfo info = Introspector.getBeanInfo(MyReflection.class);
for (PropertyDescriptor pd : info.getPropertyDescriptors()) {
System.out.println(pd.getName());
}
BeanInfo info2 = Introspector.getBeanInfo(MyReflection2.class);
for (PropertyDescriptor pd : info2.getPropertyDescriptors()) {
System.out.println(pd.getName());
}
}
}
public class MyReflection {
String mRef;
public String getMRef() {
return mRef;
}
public void setMRef(String ref) {
mRef = ref;
}
}
public class MyReflection2 {
String mmRef;
public String getMmRef() {
return mmRef;
}
public void setMmRef(String mmRef) {
this.mmRef = mmRef;
}
}
输出结果是
MRef
class
class
mmRef
也就是对mRef这种字段,用自省识别出来的属性名竟然是MRef。
so, 在程序中尽量不要定义 uUIDClassDao这种属性,而用uuidClassDao。因为可能在你不知道的地方,uUIDClassDao已经被识别成了 UUIDClassDao。
分享到:
相关推荐
错误信息通常类似于"Error starting ApplicationContext",并提示"UnsatisfiedDependencyException",这表明Spring框架在初始化bean时遇到了未满足的依赖。在这种情况下,错误通常与Mapper接口的自动扫描和配置有关...
Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建模型-视图-控制器(Model-View-Controller,MVC)结构的Web应用程序提供了强大的支持。在"25号05:Spring MVC1课堂内容"中,我们可以推测这是一个教学资源,...
本文将详细介绍一款支持HTTP POST调用的Windows中文分词系统,帮助读者理解其工作原理、使用方法以及相关编码问题。 一、系统概述 这款Windows中文分词系统设计为Web服务,允许通过HTTP POST请求进行调用,适用于...
FusionMaps 是一款专业的数据可视化工具,主要用于创建交互式的地图图表。它将复杂的数据转换为易于理解的地理信息图形,广泛应用于商业智能、数据分析和报告等领域。`FusionMaps_Enterprise.rar` 可能是该软件的...
总线驱动作为设备驱动的父级,负责发现、枚举和配置连接在总线上的设备。 七、实例分析 光盘中的实例代码可能包含以下部分: - 简单的字符设备驱动示例,如LED控制或串口通信。 - 块设备驱动示例,如虚拟磁盘驱动...
- `org.springframework.beans.factory.UnsatisfiedDependencyException`: 这表明Spring容器在尝试创建`userServiceImpl`时未能满足其依赖关系。 - `org.springframework.beans.factory.BeanCreationException`: ...
- org.springframework.beans.factory.UnsatisfiedDependencyException 不满足依赖异常 - org.springframework.beans.factory.BeanCreationException - org.springframework.beans.BeanInstantiationException - org...
接下来,我们遇到了另一个问题,即在创建bean时出现异常,具体是“Unsatisfied dependency expressed through field 'userService'”。这意味着Spring无法满足依赖注入,因为依赖的`userService`没有被正确地初始化...
All Classes AbstractAdvisorAutoProxyCreator AbstractApplicationContext AbstractApplicationEventMulticaster AbstractAspectJAdvice AbstractAspectJAdvisorFactory AbstractAspectJAdvisorFactory....
最后,如果在运行时出现“UnsatisfiedDependencyException”,表示Spring无法满足依赖注入的要求。这通常是因为bean的构造参数类型与配置文件中的声明不一致。例如,配置文件中可能有如下错误代码: ```xml 杨凯" />...
可以解决问题,这样就正确地将`string`类型赋值给了`TStrings`的`.Text`属性。 理解并解决这些常见的Delphi问题对于提高开发效率至关重要。当遇到类似问题时,检查语法、类型匹配、方法声明以及编译器状态都是有效...
use Ramsey\Uuid\Exception\UnsatisfiedDependencyException; class UuidGenerator { public static function generate() { try { return Uuid::uuid4(); } catch (UnsatisfiedDependencyException $e) { // ...
FindBugs规则整理中文版.pdf FindBugs是一款静态代码分析工具,旨在帮助开发者检测Java...FindBugs规则整理中文版.pdf文件提供了多个方面的安全性和代码质量问题的解决方法,旨在帮助开发者编写更加安全、可靠的代码。
在高版本 SpringBoot(2.0 以上)中,添加 activemq 连接池依赖项时可能会出现 Error creating bean with name 'xxx': Unsatisfied dependency expressed through field 'jmsTemplate' 的错误,可以将 activemq 连接...
`FindBugs` 是一款静态代码分析工具,用于检测 Java 代码中的潜在错误和不良实践。这份报告列举了一些常见的 `FindBugs` 报告问题,让我们...在开发过程中定期运行 `FindBugs` 分析可以帮助及时发现和修复这些问题。
Eclipse 是一个强大的开源集成开发环境(IDE),广泛用于Java应用程序的开发,但它同样支持其他编程语言,包括C和C++。CDT(C/C++ Development Tooling)是Eclipse的一个插件集,专为C和C++开发者提供了一整套的开发...
### 知识点一:Windows API 在 VB 中的应用 Windows API(Application Programming Interface)是微软为 Windows 操作系统提供的一组编程接口函数集合,通过这些函数可以实现对 Windows 操作系统的底层控制。...
通过分析程序的字节码,FindBags能够帮助开发者发现潜在的问题,提高软件的质量和安全性。本文将详细介绍FindBugs 1.3.9版本中的部分规则,主要涉及安全性和编码实践方面。 #### 安全性相关规则 ##### Dm:...
为了解决这个问题,麻省理工学院斯隆管理学院的Hippel教授提出了领先用户理论。他发现领先用户能为企业提供宝贵的创新方向,因为他们预示着市场的未来需求。 接着,文档强调在实施领先用户方法论的过程中,识别领先...
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装