关于java.lang.IllegalArgumentException: 'dataSource' or 'jdbcTemplate' is required 类似问题的解决总结
2011-10-10 09:30
615 查看
本文属原创,转载请注明出处。
这一类问题容易出现在应用Spring内置的一些DAO支持类的时候发生。
比如一个类需要继承 JdbcDaoSupport 这个类。
public class SearchProductLuceneDAO extends JdbcDaoSupport {
}
使用Spring中DAO支持类的时候,需要在Spring的配置文件中定义一个bean,具体有需要使用的bean来决定,我使用的是JdbcTemplate。所以配置为:
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource" />
</bean>
这个类的使用需要一个dataSource,一般都是配置好的,引用到这里就行了。
好了,到这里基本完成了,还剩最后一步,那就是注入。
打开 JdbcDaoSupport 的源代码会发现,此类中需要一个 jdbcTemplate。仔细看了源码会发现,注入一个dataSource也是可以的。那么现在的问题是怎么注入?
两种方法,一种是xml配置这个DAO,将jdbcTemplate这个bean注入进去。可是可能会出现疑惑,因为这个需要注入的属性 jdbcTemplate 是在父类中的属性,子类里面没有啊,怎么注入啊。一想,父类有不就等于子类有吗?仔细一看,还是不对,因为这个属性在父类中是私有的,子类没有这个属性。
分析一下Spring的注入,它是根据Set方法来注入的,父类有jdbcTemplate属性,私有的,但是有公用的get和set方法,那么想当与子类也有了这两个方法,好了,思路清晰了。
直接配置就行了:
<bean id="productSearchDAO" class="cn.com.leon.manager.search.dao.SearchProductLuceneDAO">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
这样就直接将jdbcTemplate注入进去了,是根据父类的set方法注入的,与属性无关,所说义SearchProductLucene只用集成JdbcDaoSupport,别得什么都不用,直接用
getJdbcTemplate ()方法进行使用就行了。
第二种就是注解的方式。怎样使用注解把jdbcTemplate注入到父类去呢?
根据刚才的分析,也很简单。既然是根据set方法进行注入的,那就先注入到子类,再利用父类的set方法注入进去。
也不用在子类中申明什么变量,就直接利用set方法:
@Resource
public void setJb(JdbcTemplate jb) {
super.setJdbcTemplate(jb);
} 这里只要用super的set方法将注入给子类的JdbcTemplate传入父类就行了。不用配置Spring配置文件,但是JdbcTemplate还是要在Spring配置文件中申明的。
这一类问题容易出现在应用Spring内置的一些DAO支持类的时候发生。
比如一个类需要继承 JdbcDaoSupport 这个类。
public class SearchProductLuceneDAO extends JdbcDaoSupport {
}
使用Spring中DAO支持类的时候,需要在Spring的配置文件中定义一个bean,具体有需要使用的bean来决定,我使用的是JdbcTemplate。所以配置为:
<bean id="jdbcTemplate"
class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource" />
</bean>
这个类的使用需要一个dataSource,一般都是配置好的,引用到这里就行了。
好了,到这里基本完成了,还剩最后一步,那就是注入。
打开 JdbcDaoSupport 的源代码会发现,此类中需要一个 jdbcTemplate。仔细看了源码会发现,注入一个dataSource也是可以的。那么现在的问题是怎么注入?
两种方法,一种是xml配置这个DAO,将jdbcTemplate这个bean注入进去。可是可能会出现疑惑,因为这个需要注入的属性 jdbcTemplate 是在父类中的属性,子类里面没有啊,怎么注入啊。一想,父类有不就等于子类有吗?仔细一看,还是不对,因为这个属性在父类中是私有的,子类没有这个属性。
分析一下Spring的注入,它是根据Set方法来注入的,父类有jdbcTemplate属性,私有的,但是有公用的get和set方法,那么想当与子类也有了这两个方法,好了,思路清晰了。
直接配置就行了:
<bean id="productSearchDAO" class="cn.com.leon.manager.search.dao.SearchProductLuceneDAO">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
这样就直接将jdbcTemplate注入进去了,是根据父类的set方法注入的,与属性无关,所说义SearchProductLucene只用集成JdbcDaoSupport,别得什么都不用,直接用
getJdbcTemplate ()方法进行使用就行了。
第二种就是注解的方式。怎样使用注解把jdbcTemplate注入到父类去呢?
根据刚才的分析,也很简单。既然是根据set方法进行注入的,那就先注入到子类,再利用父类的set方法注入进去。
也不用在子类中申明什么变量,就直接利用set方法:
@Resource
public void setJb(JdbcTemplate jb) {
super.setJdbcTemplate(jb);
} 这里只要用super的set方法将注入给子类的JdbcTemplate传入父类就行了。不用配置Spring配置文件,但是JdbcTemplate还是要在Spring配置文件中申明的。
相关文章推荐
- 关于java.lang.IllegalArgumentException: 'dataSource' or 'jdbcTemplate' is required 类似问题的解决总结
- SSH框架环境搭建问题:java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
- 解决java poi导出excel2003不能超过65536行的问题(java.lang.IllegalArgumentException: Invalid row number (65536) o)
- Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlMapClient' is required的解决办法及详细介绍
- JMeter学习-027-JMeter参数文件(脚本分发)路径问题:jmeter.threads.JMeterThread: Test failed! java.lang.IllegalArgumentException: File distributed.csv must exist and be readable解决方法
- 解决FTP的URL访问不能有中文名称的问题,报java.lang.IllegalArgumentException
- java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
- 关于recycleView的java.lang.IllegalArgumentException异常问题
- Tomcat的异常 java.lang.IllegalArgumentException: Document base 发现问题解决问题
- 解决java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.ArrayList的问题
- Bitmap.createBitmap java.lang.IllegalArgumentException: width and height must be > 0 问题解决
- java.lang.IllegalArgumentException: column '_id' does not exist问题的解决方案
- 如何解决java.lang.IllegalArgumentException: Illegal character in query at index 的问题?
- java.lang.IllegalArgumentException:pointerIndex out of range问题的两种解决办法
- Bitmap.createBitmap java.lang.IllegalArgumentException: width and height must be > 0 问题解决
- Android酱油笔记之关于java.lang.IllegalArgumentException: contains a path separator的问题
- bug_ _ java.lang.IllegalArgumentException: pointerIndex out of range 问题的两种解决办法
- 【Android】aar打包出现java.lang.IllegalArgumentException: MALFORMED 问题解决
- java.lang.IllegalArgumentException: pointerIndex out of range 问题的两种解决办法
- 调试虚拟机[置顶] 关于AndroidRuntime: FATAL EXCEPTION: GLThread 10 java.lang.IllegalArgumentException问题