使用@Inject批注注入在xml文件中声明的bean

时间:2013-05-03 09:31:12

标签: spring cdi

我无法让@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);

}

弹簧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>

干杯!

3 个答案:

答案 0 :(得分:1)

这在Spring中运行良好。我使用的是@Autowired注释,而不是@Inject

答案 1 :(得分:0)

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

@Inject
private DataSource dataSource;

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

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

我确信有更好或更“清洁”的方法来实现这一目标,但我找不到任何方法。 谢谢你的建议!

答案 2 :(得分:0)

要删除此位置不允许注释@Qualifier 消息,您必须使用注释@interface