今天在项目中写代码,遇到两个Spring的问题,记录一下。再一次看到了spring的灵活之处。
1、@Autowired没有生效
打算用unitils来搞一下单元测试,于是搞了一个spring的xml文件,里面配置了几个Bean,然后用unitils的注解搞了(为啥用这个?主要是考虑少写点代码,以前是直接用ClassPath***ApplicationContext来搞的),但是发现有的bean里面引用了别的bean,是通过Autowired来搞的,没有写属性的set方法,但是在实际运行中,抛出来空指针。
A、刚开始以为是这个框架的问题,换了一个框架,问题还是一样,于是有还原回去了
B、以为是spring的配置文件的问题,再三review了一下,发现没有大问题
C、打算在xml中显示的配制出,如果A Bean依赖了B Bean那就再properties中配置,但是没有set属性,所以还是不行
D、加一个set属性就行了吧?但是就是不想写,于是继续寻找方法
E、当时好奇为啥web容器启动能够找到,但是单元测试就不行呢?
1
2
3
4
5
6
|
import org.unitils.UnitilsJUnit4;
import org.unitils.spring.annotation.SpringApplicationContext;
@SpringApplicationContext ({ "/configcenter-spring.xml" })
public class BaseTestCase extends UnitilsJUnit4 {
} |
怎么解决的?
继续在google中寻找答案,最终原因是,如果要使用@Autowired的话,需要配置一个Bean
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
这个Bean是负责装载@Autowired的注解的Bean的。
为啥web容器中不用显示的配置呢?
应该是web框架在启动的时候,把这个bean注入到Spring容器中了。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.unitils</groupId>
<artifactId>unitils</artifactId>
<version>2.2</version>
<scope>test</scope>
</dependency>
2、抛出异常java.lang.reflect.MalformedParameterizedTypeException
这个是在Spring中集成Activiti,遇到的是抛出了这个异常。
刚开始在网上找,走弯路了,直接在google中输入的这个异常,很多是不相关的答复,但是有文章说是spring 3 和 spring 2.X的问题。
仔细看了一下,确实是spring3,于是排除spring3,用系统中默认的spring 2.5.6.
但是,还是不行,为啥呢?
抛出异常的配置文件
-
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
-
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
-
</bean>
于是继续找,在这里找到了答案:http://blog.csdn.net/ie8848520/article/details/8634479
原来是FactoryBean中,在2.5的时候还不支持泛型,在3.x的时候支持了泛型FactoryBean<T>,ProcessEngineFactoryBean继承了FactoryBean,但是使用了泛型,于是在spring 2.5的环境中就抛出了异常。
那咋办呢?
不能让整体的spring从2.5升级到3.x吧,毕竟系统升级这个还是有风险的。
换了一个配置,做了一个适配。
ProcessEngineFactoryBean中的getObject是调用了:
processEngine = (ProcessEngineImpl) processEngineConfiguration.buildProcessEngine();
那就直接用这个buildProcessEngine吧。
1
2
3
4
5
6
7
8
9
|
<!-- 由于spring2.5的FactoryBean不支持泛型,所以没法通过ProcessEngineFactoryBean来构建 --> < bean id = "processEngine" factory-bean = "processEngineConfiguration" factory-method = "buildProcessEngine" > </ bean >
< bean id = "repositoryService" factory-bean = "processEngineConfiguration" factory-method = "getRepositoryService" />
< bean id = "runtimeService" factory-bean = "processEngineConfiguration" factory-method = "getRuntimeService" />
< bean id = "identityService" factory-bean = "processEngineConfiguration" factory-method = "getIdentityService" />
< bean id = "taskService" factory-bean = "processEngineConfiguration" factory-method = "getTaskService" />
< bean id = "historyService" factory-bean = "processEngineConfiguration" factory-method = "getHistoryService" />
< bean id = "managementService" factory-bean = "processEngineConfiguration" factory-method = "getManagementService" />
|
spring的灵活强大之处再一次体现出来了。。。
相关推荐
然而,有时候我们可能会遇到"spring源码报错缺失的两个包"这样的问题,这意味着我们的开发环境缺少了某些必要的依赖,导致Spring框架无法正常工作。在这个情况下,解决办法就是将这两个包添加到构建路径(build path...
然而,有时候我们可能会遇到一些问题,比如在尝试构建或导入Spring 5.0.X的源码时,可能会遇到“缺失的两个包”的报错。这个问题通常指的是缺少了运行Spring框架所必需的依赖库。在本案例中,报错提示的两个缺失的包...
在本案例中,"Spring源码编译缺少的两个包:spring-cglib-repack-3.2.0.jar和spring-objenesis-repack-2.2.jar"揭示了这两个关键的库对于Spring源码编译是必不可少的。下面将详细讲解这两个库的作用及其在Spring中的...
在Spring框架中,Bean的生命周期管理是其核心特性之一,然而有时我们可能会遇到Spring Bean重复执行两次的问题,即实例被构造两次。这个问题可能是由多种原因引起的,涉及到Spring的初始化过程和容器的行为。以下是...
总结起来,解决"Spring出错导入俩个jar包"的问题,你需要确保`commons-dbcp.jar`和`commons-pool.jar`这两个库已添加到项目的类路径中,并在`applicationContext.xml`中正确配置`BasicDataSource`,以便Spring能有效...
标题提到的"spring-cglib-repack-3.2.4.jar"和"spring-objenesis-repack-2.4.jar"是两个关键的Java档案(JAR)文件,它们在Spring源码的编译和运行时起着至关重要的作用。下面将详细解释这两个JAR包的作用以及与...
在Flex的配置文件(如`flex-config.xml`)中,常常会看到`rootUrl`和`contentRoot`这两个属性,但它们的具体含义和用法有时并不清晰。 **解释:** - `rootUrl`:指定Flex应用的根URL,通常用于确定Flex应用的基路径...
在 Spring 框架中,控制多个 bean 的初始化顺序是一个常见的问题。本篇文章将详细介绍如何控制 2 个 bean 的初始化顺序,提供了多种实现方式,并分析了每种方式的优缺。 问题场景 在实际开发中,我们经常会遇到...
当我们遇到Spring定时器执行两次或者更多次的问题时,这通常是由于配置不当或者多线程并发导致的。下面将详细介绍如何使用Spring集成Quartz,以及解决定时任务重复执行的问题。 首先,让我们了解Spring如何配置...
然而,有时候在导入Spring项目时,可能会遇到一些问题,例如标题中提到的"spring-cglib-repack-3.2.4.jar"和"spring-objenesis-repack-2.4.jar"这两个jar包的缺失。这些jar包对于Spring框架的正常运行至关重要,因为...
这两个文件对于理解MyBatis-Spring的内部工作原理和进行问题排查非常有用。 `mybatis-spring-1.2.3-javadoc.jar`是一个文档包,包含了MyBatis-Spring 1.2.3版本的Java API文档。这个文档详细解释了各个类和方法的...
在Spring MVC和Spring框架的整合应用中,常常会遇到两套上下文的问题。Spring MVC是Spring框架的一个模块,主要用于处理Web请求,而Spring则提供了一个更广泛的IoC(Inversion of Control,控制反转)和AOP(Aspect ...
在提供的文件列表"spIb-mvc"中,虽然没有具体文件内容,但我们可以假设它包含了一个Spring MVC相关的项目示例。在排查定时任务问题时,可以查看项目的配置文件(如`application.properties`或`application.yml`)、...
本压缩包包含的是Spring 2和Spring 3两个版本的相关技术文档,对于理解和掌握Spring框架的核心概念和技术细节具有很高的参考价值。 《[www.java1234.com]spring3.0_CN.chm》可能是Spring 3.0中文官方手册,这份文档...
然而,由于这两个框架各自都有自己的容器和配置,所以在整合使用时可能会遇到包冲突的问题。以下是对这个问题的详细分析和解决策略。 1. **冲突原因**: - **版本不兼容**:Spring和Hibernate的不同版本之间可能...
它解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。 简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式)轻量级开源框架。它可以单独应用于构筑应用程序,也可以...
例如,两个应用都依赖于同一个Struts2或Spring的核心库,那么可能会有以下问题: 1. **版本冲突**:不同应用可能依赖于不同版本的相同库,这可能导致方法签名不匹配或者功能缺失。 2. **类装载混乱**:由于Java的类...
在本文中,我们将深入探讨如何使用Flex来绘制拓扑图,并着重介绍两个关键的库:Spring和一位高手编写的自定义库。Flex是一种强大的ActionScript框架,用于构建富互联网应用程序(RIA),它允许开发者创建交互式的、...
当我们在研究或编译Spring 4.0的源码时,可能会遇到一些依赖问题,其中"spring-cglib-repack-3.1.jar"和"spring-objenesis-repack-2.1.jar"是两个关键的jar包,它们在源码编译过程中起着至关重要的作用。本文将详细...
Spring JDBC是Spring框架的一个重要模块,它简化了Java数据库连接(JDBC)的使用,提供了更高级别的抽象,使得数据库操作...如果在开发过程中遇到缺少依赖的问题,可以根据需要联系提供者,或者自行从官方仓库下载。