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

来源:互联网 发布:淘宝erp系统哪个好 编辑:程序博客网 时间:2024/05/17 05:51

              昨天新搭建了一个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 />的区别。

             

0 0
原创粉丝点击