Java 针对接口的自动连接返回null-Spring MVC

Java 针对接口的自动连接返回null-Spring MVC,java,spring,spring-mvc,autowired,Java,Spring,Spring Mvc,Autowired,我正在从事这个Spring MVC项目,在这个项目中,我很难通过Dao实现的接口将这个Dao类自动连接到控制器中。这是我的spring config.xml的一部分。我正在使用aspectJ,注释和TX管理 <aop:aspectj-autoproxy /> <context:component-scan base-package="com.simulator" /> <context:annotation-config /> <tx:annotatio

我正在从事这个
Spring MVC
项目,在这个项目中,我很难通过
Dao
实现的
接口将这个
Dao
类自动连接到控制器中。这是我的
spring config.xml
的一部分。我正在使用
aspectJ
注释
TX管理

<aop:aspectj-autoproxy />
<context:component-scan base-package="com.simulator" />
<context:annotation-config />
<tx:annotation-driven />

<context:property-placeholder
        location="classpath*:config.properties" />

<bean id="oidDao" class="com.simulator.service.OidDao">
        <property name="ipaddressNC" value="${ipaddressNC}" />
        <property name="ipaddressOM" value="${ipaddressOM}" />
        </bean>
经理: 控制器:
我试图重用Dao,因此我不想从每个方法多次调用ApplicationContext。我做错了什么?如果我将变量
getipaddress nc、getipaddress om
设为静态,则
自动布线
工作,如果不是,则
oim
返回null,尽管
变量在应用程序加载时通过setters
初始化

您对
OIDAO
使用了组件扫描手动接线。您在xml配置中定义了
OIDAO
,如下所示:

<bean id="oidDao" class="com.simulator.service.OidDao">
        <property name="ipaddressNC" value="${ipaddressNC}" />
        <property name="ipaddressOM" value="${ipaddressOM}" />
</bean>
@Component
public class OidDao implements OidManager {
...
}

放下
组件
注释,我想你会没事的!否则,
将选择
OidDao
并使用默认构造函数从中实例化一个实例,而无需调用
setters

您使用的是@Component annotation+,您还定义了一个bean。因此实际上创建了两个bean。由于使用@Component而创建的组件的属性将设置为“null”。这是预期的,因为您没有将属性设置为任何值。删除@Component annotation并在bean定义上使用“autowire candidate=“true”属性,或者删除XML中的bean定义,并在类上使用相关注释将属性设置为属性文件中的正确值。

将bean定义更改为:

<bean id="oim" class="com.simulator.service.OidDao">
   <property name="ipaddressNC" value="${ipaddressNC}" />
   <property name="ipaddressOM" value="${ipaddressOM}" />
</bean>


让它创建id为
oim
的bean,该bean可以设置为控制器中的属性
oim

非常好。这就成功了。但是setter在dao类中被调用,变量被初始化,但是当从控制器调用时,它返回null。该值没有保留在内存中。很高兴它能工作,如果您投票并接受答案,我将不胜感激:)谢谢您的澄清
<bean id="oidDao" class="com.simulator.service.OidDao">
        <property name="ipaddressNC" value="${ipaddressNC}" />
        <property name="ipaddressOM" value="${ipaddressOM}" />
</bean>
@Component
public class OidDao implements OidManager {
...
}
<bean id="oim" class="com.simulator.service.OidDao">
   <property name="ipaddressNC" value="${ipaddressNC}" />
   <property name="ipaddressOM" value="${ipaddressOM}" />
</bean>