gpt4 book ai didi

java - Spring Autowiring 为抽象类提供 null bean

转载 作者:行者123 更新时间:2023-11-30 02:45:18 26 4
gpt4 key购买 nike

我正在尝试将(Autowire)JDBCTemplate注入(inject)到我的Dao类中,这是一个“抽象类”,这不起作用,因为spring为JDBCTemplate提供了null bean。

public abstract class SSODaoImpl extends NamedParameterJdbcDaoSupport implements  SSODao{

public SSODaoImpl(){

}
@Autowired //giving null jdbcTemplate
public SSODaoImpl(JdbcTemplate jdbcTemplate){
super.setJdbcTemplate(jdbcTemplate);
}
}

SSODaoImpl 扩展了我的许多其他 DAO,如下所示

@Repository("askBenefitsDAO")
public class AskBenefitsSSODaoImpl extends SSODaoImpl{
}

我已在文件 JDBCContext.xml 中创建了该 bean,并在 web.xml 中引用了它

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jndi/hpdb_hrdb"/>
</bean>

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>

Web.xml

<context-param>
<param-name> /WEB-INF/spring/JDBCTemplate/JDBCContext.xml</param-value>
</context-param>
<小时/>

启动应用程序时来自 spring 的错误消息

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'askBenefitsDAO' defined in file [AskBenefitsSSODaoImpl.class]: 
Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'dataSource' or 'jdbcTemplate' is required

上述设置适用于“非抽象类”设置。请帮我解决这个问题并让我知道我做错了什么

最佳答案

原因是因为spring没有直接调用SSODaoImpl类的构造函数,而是在Spring实例化AskBenefitsSSODaoImpl类时调用其构造函数并且因此 Spring 无法将 jdbcTemplate 绑定(bind)到您的 SSODaoImpl 类。

您可以通过将代码修改为以下内容来实现此目的:

@Repository("askBenefitsDAO")
public class AskBenefitsSSODaoImpl extends SSODaoImpl{
@Autowired
public AskBenefitsSSODaoImpl(JdbcTemplate jdbcTemplate){
super(jdbcTemplate);
}

}

public abstract class SSODaoImpl extends NamedParameterJdbcDaoSupport implements SSODao{

public SSODaoImpl(){

}
public SSODaoImpl(JdbcTemplate jdbcTemplate){
super.setJdbcTemplate(jdbcTemplate);
}
}

关于java - Spring Autowiring 为抽象类提供 null bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40366450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com