今天在项目中写代码,遇到两个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的灵活强大之处再一次体现出来了。。。
相关推荐
它解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。 简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式)轻量级开源框架。它可以单独应用于构筑应用程序,也可以...
开发过程中遇到两个问题: 1.验证失败一次后就连续验证失败 这个属于与Spring整合的问题,Spring容器在初始化对象的时候会根据bean的scope配置来考虑是重新建立一个对象,还是继续使用原来的对象,拿struts2的...
面试高级开发的期间整理的面试题目,记录我面试遇到过的spring题目以及答案 目录 spring ThreadLocal的底层对象; 为什么@Service和@Repository放到实现类上面而不是接口类上面; spring 三种注入(就是从spring容器...
开发中遇到两个问题: 1.STRUTS2乱码,解决方法是在struts.xml中加入 2.验证失败一次后就连续验证失败 (即使密码正确) 这个属于与Spring整合的问题,Spring容器在初始化对象的时候会根据bean的scope配置来考虑是...
在这个系列中一共包含6个案例,从简单到复杂,也是对问题分解、思考和解决的一个过程,它们分别是: (1)类之间的依赖; 降低 (2)接口依赖; (3)基 于配置文件和Reflection的工厂模式; (4)使用Spring.net...
这个东西是我在配置spring和quartz实现定时任务时遇到的。因为spring2.0好像有bug,在spring配置文件中用普通的trigger注入...里面有MethodInvokingJobDetailFactoryBean和BeanInvokingJobDetailFactoryBean两个java类
最近想深入的研究一下spring源码,昨天心血来潮从网上文章找到将spring源码导入eclipse中方法,但是下载下来的源码还需处理生成,其中两大难点,第一:处理时间长,大概用掉我5个小时。第二:中途会遇到各种问题。...
请使用struts2.1.8,如果你已经在学习2.1.6版本,并且遇到类似xwork的异常,导致tomcat无法正常启动,可将struts2.1.8和xwork2.1.6两个包替换原来的那两个包,然后删除tomcat下的工程(非常重要,否则会继续报错),...
NULL 博文链接:https://medbricom.iteye.com/blog/1782765
说下在整合中遇到的问题 : 1.刚开始各种报错, 原因有两点 第一点 哪个地方写错字了 哪个地方不该这样写 第二点 少加包了 然后看看报的什么错 看看少了什么包 搜下 加到pom.xm里 2.包的版本问题,在pom.xml里最好先...
本演示示例主要使用目前最新,最流行技术Struts2.1 +Spring 2.5.1+ibatis2.3整合开发而成,这与我以前发布的版本中最大特色是整合了Spring2.5.1中的注解功能和半自动化工具ibatis技术,这是本示例的两大特色,简化了配置...
这两个技术在大数据处理和Java Web开发中扮演着重要的角色。在此次总结中,我将回顾我所学到的内容、遇到的挑战和取得的进展。 首先,我开始了对Spark的学习。Spark是一个强大的分布式计算框架,用于处理大规模数据...
不同服务之间或者多服务之间调用接口的场景实际中会经常遇到,目前市面上解决该问题比较流行的两大框架为dubbo和springcloud, 这里是一个简单的dubbo入门的案例,分为两个小案例一个和spring和结合案例,另一个是和...
该配置文件连接的是两个数据库结构相同的数据源,其他比如数据库结构不原理也可行。本人在遇到此问题时上网搜了很多答案结果都不怎么如意,有的太深奥不过思想很好,有的又太不给力,后来自己慢慢研究配置成功后想与...
这两个技术在大数据处理和Java Web开发中扮演着重要的角色。在此次总结中,我将回顾我所学到的内容、遇到的挑战和取得的进展。 首先,我开始了对Spark的学习。Spark是一个强大的分布式计算框架,用于处理大规模数据...
这两个技术在大数据处理和Java Web开发中扮演着重要的角色。在此次总结中,我将回顾我所学到的内容、遇到的挑战和取得的进展。 首先,我开始了对Spark的学习。Spark是一个强大的分布式计算框架,用于处理大规模数据...
框架中包含了熔断器聚合监控、链路追踪监控,这里比较常规就不再赘述,唯一遇到的问题就是链路追踪时日志包重复引用的错误如下处理即可 <groupId>io.zipkin.java <artifactId>zipkin-server ${zipkin.version} ...
Spring Boot JPAHibernate查询方法 Spring Data JPA是提供各种API来执行CRUD操作...派生的查询方法名称具有两个主要组成部分,并由第一个By关键字分隔: 诸如查找,读取,查询,计数或获取之类的介绍器子句告诉Spring
struts2+Hibernate+Spring 示例 目的:构建struts2开发框架 使用 Hibernate作为持久层操作 采用Spring容器 适合:有一定struts2基础 对Hibernate有一定的了解 对Spring有一定的知识 实现:通过对用户信息的基本...
在web开发中,经常遇到...而使用hibernate,它的修改是基于对象的,如果用户修改的字段非常多,但是我们并不知道用户到底修改了那个字段,这时候就需要一个一个的去判断,因此非常耗时,所以我写了个工具类来帮助大家!