`
iamzhongyong
  • 浏览: 806462 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

今天遇到的两个spring相关的两个问题

阅读更多

今天在项目中写代码,遇到两个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.

但是,还是不行,为啥呢?

抛出异常的配置文件

  1. <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">  

  2.     <property name="processEngineConfiguration" ref="processEngineConfiguration" />  

  3.   </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的灵活强大之处再一次体现出来了。。。

 

 

3
0
分享到:
评论

相关推荐

    spring源码报错缺失的两个包

    然而,有时候我们可能会遇到"spring源码报错缺失的两个包"这样的问题,这意味着我们的开发环境缺少了某些必要的依赖,导致Spring框架无法正常工作。在这个情况下,解决办法就是将这两个包添加到构建路径(build path...

    spring5.0.X源码报错缺失的两个包

    然而,有时候我们可能会遇到一些问题,比如在尝试构建或导入Spring 5.0.X的源码时,可能会遇到“缺失的两个包”的报错。这个问题通常指的是缺少了运行Spring框架所必需的依赖库。在本案例中,报错提示的两个缺失的包...

    Spring源码编译缺少的两个包:spring-cglib-repack-3.2.0.jar和spring-objenesis-repack-2.2.jar

    在本案例中,"Spring源码编译缺少的两个包:spring-cglib-repack-3.2.0.jar和spring-objenesis-repack-2.2.jar"揭示了这两个关键的库对于Spring源码编译是必不可少的。下面将详细讲解这两个库的作用及其在Spring中的...

    Spring出错导入俩个jar包

    总结起来,解决"Spring出错导入俩个jar包"的问题,你需要确保`commons-dbcp.jar`和`commons-pool.jar`这两个库已添加到项目的类路径中,并在`applicationContext.xml`中正确配置`BasicDataSource`,以便Spring能有效...

    Spring Bean重复执行两次(实例被构造两次)问题分析

    在Spring框架中,Bean的生命周期管理是其核心特性之一,然而有时我们可能会遇到Spring Bean重复执行两次的问题,即实例被构造两次。这个问题可能是由多种原因引起的,涉及到Spring的初始化过程和容器的行为。以下是...

    spring源码缺少的两个jar包spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.4.jar

    标题提到的"spring-cglib-repack-3.2.4.jar"和"spring-objenesis-repack-2.4.jar"是两个关键的Java档案(JAR)文件,它们在Spring源码的编译和运行时起着至关重要的作用。下面将详细解释这两个JAR包的作用以及与...

    整合flex和spring常遇到的问题

    在Flex的配置文件(如`flex-config.xml`)中,常常会看到`rootUrl`和`contentRoot`这两个属性,但它们的具体含义和用法有时并不清晰。 **解释:** - `rootUrl`:指定Flex应用的根URL,通常用于确定Flex应用的基路径...

    详解Spring 中如何控制2个bean中的初始化顺序

    在 Spring 框架中,控制多个 bean 的初始化顺序是一个常见的问题。本篇文章将详细介绍如何控制 2 个 bean 的初始化顺序,提供了多种实现方式,并分析了每种方式的优缺。 问题场景 在实际开发中,我们经常会遇到...

    spring java 定时器 执行两次 quartz

    当我们遇到Spring定时器执行两次或者更多次的问题时,这通常是由于配置不当或者多线程并发导致的。下面将详细介绍如何使用Spring集成Quartz,以及解决定时任务重复执行的问题。 首先,让我们了解Spring如何配置...

    spring导入eclipse时少的spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.4.jar

    然而,有时候在导入Spring项目时,可能会遇到一些问题,例如标题中提到的"spring-cglib-repack-3.2.4.jar"和"spring-objenesis-repack-2.4.jar"这两个jar包的缺失。这些jar包对于Spring框架的正常运行至关重要,因为...

    mybatis-spring.jar整合包(包含两个版本,有源码jar包)

    这两个文件对于理解MyBatis-Spring的内部工作原理和进行问题排查非常有用。 `mybatis-spring-1.2.3-javadoc.jar`是一个文档包,包含了MyBatis-Spring 1.2.3版本的Java API文档。这个文档详细解释了各个类和方法的...

    springmvc spring 两套上下文问题

    在Spring MVC和Spring框架的整合应用中,常常会遇到两套上下文的问题。Spring MVC是Spring框架的一个模块,主要用于处理Web请求,而Spring则提供了一个更广泛的IoC(Inversion of Control,控制反转)和AOP(Aspect ...

    spring定时器启动两次原因及解决

    在提供的文件列表"spIb-mvc"中,虽然没有具体文件内容,但我们可以假设它包含了一个Spring MVC相关的项目示例。在排查定时任务问题时,可以查看项目的配置文件(如`application.properties`或`application.yml`)、...

    spring2,spring3 相关技术文档

    本压缩包包含的是Spring 2和Spring 3两个版本的相关技术文档,对于理解和掌握Spring框架的核心概念和技术细节具有很高的参考价值。 《[www.java1234.com]spring3.0_CN.chm》可能是Spring 3.0中文官方手册,这份文档...

    spring+hibernate包冲突问题

    然而,由于这两个框架各自都有自己的容器和配置,所以在整合使用时可能会遇到包冲突的问题。以下是对这个问题的详细分析和解决策略。 1. **冲突原因**: - **版本不兼容**:Spring和Hibernate的不同版本之间可能...

    SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(Spring

    它解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。 简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式)轻量级开源框架。它可以单独应用于构筑应用程序,也可以...

    采用共享jar包部署struts2+spring集成项目会遇到的问题

    例如,两个应用都依赖于同一个Struts2或Spring的核心库,那么可能会有以下问题: 1. **版本冲突**:不同应用可能依赖于不同版本的相同库,这可能导致方法签名不匹配或者功能缺失。 2. **类装载混乱**:由于Java的类...

    Flex 画拓扑图两个库(Spring 和一个高人写的库)

    在本文中,我们将深入探讨如何使用Flex来绘制拓扑图,并着重介绍两个关键的库:Spring和一位高手编写的自定义库。Flex是一种强大的ActionScript框架,用于构建富互联网应用程序(RIA),它允许开发者创建交互式的、...

    spring-cglib-repack-3.1.jar,spring-objenesis-repack-2.1.jar

    当我们在研究或编译Spring 4.0的源码时,可能会遇到一些依赖问题,其中"spring-cglib-repack-3.1.jar"和"spring-objenesis-repack-2.1.jar"是两个关键的jar包,它们在源码编译过程中起着至关重要的作用。本文将详细...

    spring_JDBC整合包

    Spring JDBC是Spring框架的一个重要模块,它简化了Java数据库连接(JDBC)的使用,提供了更高级别的抽象,使得数据库操作...如果在开发过程中遇到缺少依赖的问题,可以根据需要联系提供者,或者自行从官方仓库下载。

Global site tag (gtag.js) - Google Analytics