3

我无法@Inject正常工作。我正在尝试使用@Inject注释从 xml 注入一个 bean,但我收到错误消息 "java.lang.IllegalArgumentException: 'dataSource' or 'jdbcTemplate' is required"

我也一直在尝试与 结合@Qualifier("dataSource"),但无论我把@Qualifier它说什么"The annotation @Qualifier is disallowed for this location"

我一直在阅读大量文档,@Inject但似乎找不到任何提及对 xml 中声明的 bean 进行任何特殊处理的内容。

但是,我猜 Spring 正在尝试在扫描 dataSourceBean 之前创建 FooDaoImpl bean。

我将如何使用@Inject来注入在 xml 文件中声明的 dataSource bean?甚至可能,使用@Inject

FooDaoImpl.java

@Repository
public class FooDaoImpl extends NamedParameterJdbcDaoSupport implements FooDao {

@Inject
private DataSource dataSource;

DSLContext create = DSL.using(dataSource, SQLDialect.DB2);

}

Spring-Module.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<context:annotation-config /> 
<context:component-scan base-package="com.example.foobar" />

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close"> 
    <property name="driverClass" value="com.ibm.db2.jcc.DB2Driver" />
    <property name="jdbcUrl" value="jdbc:db2://localhost:50000/BLABLA" />
    <property name="user" value="PAPAYA" />
    <property name="password" value="COCONUT" />
</bean>

干杯!

4

3 回答 3

1

这在春天工作得很好。我使用@Autowired注释,而不是@Inject.

于 2013-05-03T09:34:29.183 回答
0

我设法使用@Inject将 dataSource 注入到我的 Dao 中。我用 a@PostConstruct来实现这一点,如下所示:

@Inject
private DataSource dataSource;

@PostConstruct
private void initialize(){
    setDataSource(dataSource);
}

DSLContext create = DSL.using(dataSource, SQLDialect.DB2);

我敢肯定有更好的,或“更清洁”的方式来实现这一点,但我找不到。感谢您的建议!

于 2013-05-04T14:27:54.743 回答
0

要摆脱注释 @Qualifier is disallowed for this location消息,您必须使用注释@interface

于 2013-12-05T10:32:07.163 回答