前段时间公司新启动一个项目,在前期的架构搭建的时候不是怎么理想。于是,本人决定进行项目重构。花了一周时间,独立完成了。在此分享一下在这整个重构过程中遇到的问题以及解决方案。
在重构接近尾声的时候,发现spring在初始化创建jms工厂的时候,bean工厂始终创建失败;困扰我一下午时间。
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jmsFactory' defined in class path resource [conf/spring.xml]: Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)
... 37 more
Caused by: java.lang.reflect.MalformedParameterizedTypeException
at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.validateConstructorArguments(ParameterizedTypeImpl.java:60)
at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.<init>(ParameterizedTypeImpl.java:53)
at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(ParameterizedTypeImpl.java:95)
at sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(CoreReflectionFactory.java:105)
at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:140)
at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
at sun.reflect.generics.repository.ConstructorRepository.getParameterTypes(ConstructorRepository.java:94)
at java.lang.reflect.Method.getGenericParameterTypes(Method.java:292)
at java.beans.FeatureDescriptor.getParameterTypes(FeatureDescriptor.java:387)
at java.beans.MethodDescriptor.setMethod(MethodDescriptor.java:114)
at java.beans.MethodDescriptor.<init>(MethodDescriptor.java:72)
at java.beans.MethodDescriptor.<init>(MethodDescriptor.java:56)
at java.beans.Introspector.getTargetMethodInfo(Introspector.java:1149)
at java.beans.Introspector.getBeanInfo(Introspector.java:416)
at java.beans.Introspector.getBeanInfo(Introspector.java:163)
at org.springframework.beans.CachedIntrospectionResults.<init>(CachedIntrospectionResults.java:279)
at org.springframework.beans.CachedIntrospectionResults.forClass(CachedIntrospectionResults.java:189)
at org.springframework.beans.BeanWrapperImpl.getCachedIntrospectionResults(BeanWrapperImpl.java:177)
at org.springframework.beans.BeanWrapperImpl.getPropertyDescriptors(BeanWrapperImpl.java:236)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.filterPropertyDescriptorsForDependencyCheck(AbstractAutowireCapableBeanFactory.java:1368)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.filterPropertyDescriptorsForDependencyCheck(AbstractAutowireCapableBeanFactory.java:1347)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1209)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
... 43 more
最终在进行代码跟踪的时候,发现activemq-pool 的版本号是5.7.0,它依赖的commons-pool的版本号是1.6;而当前工程的commons-dbcp依赖的commons-pool的版本号是1.5.4;openjpa-kernelok依赖的commons-pool的版本号是1.3;ok,问题原因找到了。接下来,就是去解决问题。
解决方案:
在maven依赖中排除不需要的版本。
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
<!-- 排除不需要的版本 start -->
<exclusions>
<exclusion>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
</exclusion>
</exclusions>
<!-- 排除不需要的版本 end -->
</dependency>
<dependency>
<groupId>org.apache.openjpa</groupId>
<artifactId>openjpa-kernel</artifactId>
<version>1.0.4</version>
<!-- 排除不需要的版本 start -->
<exclusions>
<exclusion>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
</exclusion>
</exclusions>
<!-- 排除不需要的版本 end -->
</dependency>
分享到:
相关推荐
IoC容器(ApplicationContext或BeanFactory)负责创建对象、管理对象之间的关系以及调用初始化和销毁方法。 2. **AOP(Aspect Oriented Programming)**:Spring提供了面向切面编程的支持,允许开发者定义“切面”...
8. **性能优化**:Spring 3.1.0.M2在性能上也做了很多工作,比如对Bean的初始化进行了优化,减少了内存占用。 9. **测试支持**:Spring提供了丰富的测试框架,包括单元测试、集成测试和端到端测试。3.1.0.M2版本...
XML配置文件中的bean定义描述了如何创建、初始化、装配对象,并且可以配置bean之间的依赖关系。Spring 4.3.12.RELEASE在此基础上进一步优化了自动配置和条件注解,使得bean的管理更加灵活。 3. **jdbc**:此模块...
在`beans:`命名空间下,你可以定义bean的实例化、初始化、销毁等行为,以及它们之间的依赖关系。通过@Autowired注解,可以自动装配bean的依赖,实现灵活的依赖注入。 3. **Jdbc模块**: 提供了简化数据库操作的...
Spring提供了检查依赖关系的功能,可以在Bean初始化时,检查其依赖的其他Bean是否已经正确创建。 #### 3.8 方法注入 除了属性注入和构造函数注入,Spring还支持方法注入,即通过调用Bean的方法来注入依赖关系。 #...
Spring框架对测试提供了很好的支持,例如对JUnit的集成,允许开发者通过注解轻松创建和运行测试,无需复杂的初始化和依赖注入。这使得单元测试变得简单易行,提高了软件质量。 5. **框架集成**: Spring可以方便...
- **生命周期管理**:支持初始化方法(`@PostConstruct`)和销毁方法(`@PreDestroy`),以及自定义生命周期回调。 4. **数据访问集成** - **JDBC模板**:提供了一层抽象,简化了JDBC的使用,减少了出错的可能性。 -...
其中,XMLHttpRequest 对象是关键,它有五个返回状态值,分别是 0(未初始化)、1(载入)、2(已载入)、3(交互中)、4(完成)。在JavaScript中,可以通过 XMLHttpRequest 对象的 `status` 属性来检查HTTP协议的...
6. **Spring插件**:虽然Spring提倡的是“零配置”,但在早期版本,XDoclet也可以生成Spring的bean配置文件,简化了Spring应用的初始化过程。 7. **其他插件**:除了上述插件,还有许多针对特定框架或需求的插件,...
1. 快速项目构建:myEclipse提供模板工程,一键创建Web、Java EE项目,节省项目初始化时间。 2. 代码智能提示:通过代码自动补全,减少手动输入,提高开发速度。 3. 调试工具:强大的调试功能,包括断点、单步执行、...