关于TestNG无法采用Spring注入bean的问题解决

              昨天新搭建了一个Spring的框架,采用版本为3.2.5.RELEASE,现在spring版本都更新到4.x多了,一直都没有比较新版本的新特性,后面需要抽时间比较一下。

              言归正传,在TestNG的测试代码无法注入Bean,通过一个晚上加一个上午的捣腾,终于解决,记录一下!

              可能解决问题点有四:(不断捣腾,分不清哪个是主要原因了)

              1、testNG测试类的@ContextConfiguration(locations = {“Spring的xml配置文件路径” })的配置问题。

              2、对于父类所需的属性注解注入问题(dataSource注入)

              3、关于@Inject、@Qualifier("XXX")、@Resource(name="XXX")使用的问题

              4、Spring xml配置文件第一行不能为空的问题(这个也许真的不是原因)

              

              一、testNG测试类的@ContextConfiguration(locations = {"classpath*:ApplicationContext.xml"})的配置问题

                      感觉问题就出在这呀,但还是没找到解决方法。

                      应该就是locations路径的问题。

                      以前的应用采用maven的model进行了分包,所有的xml配置放在conf包中,conf包中的xml采用classpath*:加载是没有问题的。

                       这次由于功能相对简单,不想做那么多层的分包,把xml文档都放在src/main/resources和src/test/resources文件夹下,classpath*:是否能访问得到?上网还没找到答案呢,待续~~~

              二、对于父类所需的属性注解注入问题

                     对于父类的属性通过xml的配置,是很容易实现注入的,但对于注解注入方式,就需要注意一下,需重载父类的参数,然后使用resource注解。

                    比如 UserDao  继承于 BaseDao;BaseDao继承于JdbcDaoSupport,JdbcDaoSupport需要注入dataSource,而且JdbcDaoSupport的dataSource为private变量,get/set方法不允许重载,如何使用注解注入dataSource呢?

                    方法:在BaseDao定义如下代码,实现dataSource注入! BaseDao 的所有子类很方便使用JdbcDaoSupport使用的方法了。

                     

			private DataSource dataSourceTemp;
	
			@Resource(name="dataSource")
			public void setDataSourceTemp(DataSource dataSourceTemp) {
				this.dataSourceTemp = dataSourceTemp;
				super.setDataSource(dataSourceTemp);
			}    

              三、关于@Inject、@Qualifier("XXX")、@Resource(name="XXX")

                      testNG问题似乎不在此,但还是记录一下。

                      对于@Named注解的类,使用@Inject和@Resource(name="XXX")都能够注入。

              四、其它

                     spring的xml是有加载先后顺序的,另注意一下<context:annotation-config />和<mvc:annotation-driven />的区别。

             

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值